WinCE Security --- X509证书及私钥的导入

本文介绍了在Windows CE(WinCE)系统下,如何利用CryptoAPI函数集导入X509证书和私钥。文章列举了关键的API函数,如CertOpenStore、CertAddEncodedCertificateToStore和CryptAcquireContext等,并解释了它们的作用和使用方法。此外,还提到了WinCE与Windows环境在CryptoAPI支持上的差异,并提供了源代码示例帮助理解实际操作流程。
摘要由CSDN通过智能技术生成

作者:ARM-WinCE

 

 

WinCE下如果想导入X509证书及私钥,需要用到微软的CryptoAPI函数集,这是微软提供的专门用来支持PKI相关功能的模块。相信有些人知道在Linux下用的是Openssl,我会在后面介绍基于WinCELinux不同的平台,如何彼此进行证书验证以及加解密。今天这里先介绍一下证书和私钥的导入。

 

 

WinCE支持CryptoAPI函数,但是和Windows环境相比还是有些区别,主要是对一些Hash算法,加解密算法支持的不是很好。在WinCE下调用CryptoAPI函数实现的功能在Windows环境下运行没什么问题,但是反之,就不一定了。

 

下面先介绍一下证书及私钥导入的相关函数:

1. HCERTSTORE WINAPI CertOpenStore(LPCSTR lpszStoreProvider, DWORD dwMsgAndCertEncodingType, HCRYPTPROV hCryptProv,  DWORD dwFlags, const void* pvPara)

该函数用于打开一个证书库。

lpszStoreProvider: 证书库提供者,可以是一个文件,也可以来自一个注册表中的键值,或者是系统证书库等。

dwMsgAndCertEncodingType: 没有被使用,设置为0

hCryptProv: 密钥提供者,一般设置为NULL表示使用默认的提供者

dwFlags: 打开证书库的标记位,描述如何打开一个证书库

pvPara: 依赖于第一个参数证书提供者,说明具体的证书提供者

该函数如果调用成功,将会返回打开证书库的句柄。

 

2. BOOL WINAPI CertCloseStore(HCERTSTORE hCertStore, DWORD dwFlags)

该函数用于关闭一个证书库。

hCertStore: 要关闭的证书库的句柄

dwFlags: 标记位,表示如何关闭证书库

该函数调用成功,将返回TRUE

 

3. PCCERT_CONTEXT WINAPI CertEnumCertificatesInStore(HCERTSTORE hCertStore, PCCERT_CONTEXT pPrevCertContext)

该函数用于枚举证书库中的X509证书,该函数可以在循环中反复被调用从而枚举每一个X509证书。

hCertStore: 已打开证书库的句柄

pPrevCertContext: 指向上一个被找到的X509证书,如果该参数为NULL,表示第一次被调用

该函数调用成功,将返回被枚举的X509证书结构信息

 

这里说一下PCCERT_CONTEXT,也就是该函数的返回值,它是一个指针指向CERT_CONTEXT,该结构用于描述X509证书信息,其中包括证书的类型,编码后的证书数据,大小,以及具体X509证书内部的详细信息,比如加密算法,Public key等。

 

 

4. BOOL WINAPI CertFreeCertificateContext(PCCERT_CONTEXT pCertContext)

该函数用于释放一个证书结构。

PCCERT_CONTEXT: 要被释放的X509证书结构的指针

该函数调用成功,返回TRUE

 

 

5. BOOL WINAPI CertAddEncodedCertificateToStore(HCERTSTORE hCertStore, DWORD dwCertEncodingType, const BYTE* pbCertEncoded, DWORD cbCertEncoded, DWORD dwAddDisposition, PCCERT_CONTEXT* ppCertContext)

该函数用于添加一个X509证书到证书库当中

hCertStore: 已打开证书库的句柄

dwCertEncodingType: 证书的编码类型,这里只能是X509_ASN_ENCODING,表示X509经过ASN.1编码后的证书

pbCertEncoded: 指向要添加的证书数据

cbCertEncoded: 证书的大小

dwAddDisposition: 添加证书标记位,描述添加方法

ppCertContext: 返回经过解码后的证书,一般设置为NULL,如果不为NULL,该结构要通过CertFreeCertificateContext函数释放

该函数调用成功,返回TRUE

 

 

6. BOOLEAN CRYPTFUNC CryptAcquireContext(HCRYPTPROV* phProv, LPCTSTR pszContainer, LPCTSTR pszProvider, DWORD dwProvType, DWORD dwFlags)

该函数用于获得一个可用的密钥容器。

phProv: 返回一个密钥容器提供者的句柄

pszContainer: 密钥容器的名字,如果该参数为NULL,一个默认的秘钥容器名将被使用,如果最后一个参数类型为CYRPT_VERIFYCONTEXT,则该参数必须为NULL

pszProvider: 密钥容器提供者的名字,为NULL,表示使用一个默认的秘钥容器提供者

dwProvType: 要获得的提供者的类型

dwFlags: 密钥容器标记位,描述如何使用密钥容器

该函数调用成功,返回TRUE

 

 

7. BOOL WINAPI CryptImportKey( HCRYPTPROV hProv, BYTE* pbData, DWORD dwDataLen, HCRYPTKEY hPubKey, DWORD dwFlags, HCRYPTKEY* phKey)

该函数用于导入密钥到密钥容器中。

hProv: 密钥容器的句柄

pbData: 密钥数据,必须是密钥BLOB格式

dwDataLen: 密钥数据长度

hPubKey: 一个公钥的句柄,如果导入的密钥是经过签名或者加密的,需要该公钥进行验证或者解密。如果导入的密钥没有加密,该参数为0

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值