创建安全 Windows CE 设备 |
||||||||||||||||||||||
| 作者:Maricia Alforque 来源:microsoft.com 发布时间:2005-12-21 16:56:27 | ||||||||||||||||||||||
|
return CertifyModuleInit();
}
// 在 OemLoadInit 之后调用一次或多次
static DWORD OEMCertifyModule(LPBYTE lpData, DWORD cbData)
{
if (cbData)
{
// 处理模块字节
return CertifyModule(lpData, cbData);
}
else
{
// 最终调用
DWORD dwTrustLevel = OEM_CERTIFY_FALSE;
LPBYTE pSignedData;
DWORD cbSignedData;
BOOL fRet = CertifyModuleFinal(&pSignedData,
&cbSignedData);
if (fRet)
{
// 该文件有有效签名
// 我们希望以签名数
// 据返回信任级别
if (cbSignedData < sizeof(CHAR))
dwTrustLevel = OEM_CERTIFY_RUN;
else
switch (*pSignedData)
{
case 'T' :
dwTrustLevel = OEM_CERTIFY_TRUST;
break;
case 'R' :
dwTrustLevel = OEM_CERTIFY_RUN;
break;
default:
dwTrustLevel = OEM_CERTIFY_FALSE;
break;
}
}
#ifdef DEBUG
if (!fRet)
lpWriteDebugStringFunc(TEXT("OEMCertifyModule:signature
check failed.\r\n"));
#endif
// 返回一个 OEM_CERTIFY 级别
return dwTrustLevel;
}
}
void OEMInit()
{
...
...
//
// 设置模型签名验证挂钩。
//
pOEMLoadInit = OEMCertifyInit;
pOEMLoadModule = OEMCertifyModule;
//
// 初始化签名验证公共密钥。
//
InitPubKey(g_bSignPublicKeyBlob,sizeof(g_bSignPublicKeyBlob));
//
// 其他 OEM 初始化步骤
//
...
}
注意: OEMCertifyModuleInit 和 OEMCertifyModule 函数的名称是任意的;您可以使用任何名称。但重要的是,应初始化 OEMInit 函数中的两个内核指针:pOEMLoadInit 和 pOEMLoadModule,让它们分别指向这两个命名函数。 受限制的 API除了 OEM 函数,还可以使用 CeGetCurrentTrust 和 CeGetCallerTrust API 来查询调用应用程序的信任级别。您可以使用这些函数验证应用程序的信任级别。 不信任模块不能调用以下 API:
CreateProcess API 中的调试标志:DEBUG_ONLY_THIS_PROCESS 和 DEBUG_PROCESS 也是受限制的。 Windows CE 3.0 中的安全注册表体系结构只允许已经识别的“信任应用程序”(OEM_CERTIFY_TRUST) 修改受保护注册表中的键和值。 在 Windows CE 3.0 中,以下注册表主键及其子键是受保护的,以避免不信任应用程序的非法操作:
此外,如果不信任应用程序试图使用以下注册表函数,将得到 ERROR_ACCESS_DENIED 返回值:
因为注册表的其余部分是不受保护的,所以 OEM 必须将所有重要的注册表信息存放在某个受保护的键中。 注意: 所有应用程序对所有注册表键和值都具有只读访问权限。 使用 SSPI 管理安全性提供者在 Secur32.dll 模块中提供的安全性支持提供者接口 (SSPI) 是一个严格定义的通用 API,用于获取进行身份验证、消息的完整性检查和消息加密的集成安全服务。它在应用程序层协议和安全性协议之间提供了一个抽象层。因为不同的应用程序在网络上传输数据时所采用的识别或验证用户身份的方法,以及加密数据的方法各不相同,因此 Windows CE SSPI 提供了访问包含各种身份验证和加密数据方案的 DLL 的途径。这些 DLL 被称作安全性支持提供者 (SSP)。 下图说明了 SSP DLL 和 SSPI Secur32.dll、Winsock、WinInet 之间的关系。
图 1:SSP DLL 和 SSPI Secur32.dll、Winsock、WinInet 之间的关系 SSPI 生成应用程序可用的一个或多个 SSP(也叫做安全包)。安全包将不同的 SSPI 函数映射到该安全包专用的某个安全性协议的实现上。OEM 也可以编写他们自己的安全包,然后将其添加到注册表中。 以下是 Windows CE 3.0 中可用的 SSP:
SSPI 函数SSPI 允许应用程序开发人员使用多个 SSP 中的一个,而不必了解安全性协议的细节。 下表列出了 Windows CE 3.0 支持的 SSPI 函数。 “凭据管理函数”提供对主控者的凭据的访问。主控者是一个操作系统能识别的实体,可以是用户或进程。主控者使用凭据建立用户或应用程序的标识。
“上下文管理函数”允许应用程序创建和使用安全上下文。安全上下文是与连接相关的安全数据,并且包含诸如会话密钥和会话持续时间等数据。客户端和服务器必须合作,来共同创建安全上下文。
|
||||||||||||||||||||||
| [] [返回上一页] [打 印] | ||||||||||||||||||||||
文章评论 |
||||||||||||||||||||||

