C语言操作WINDOWS系统存储区数字证书相关函数详解

本文详细介绍了如何使用C语言操作Windows系统存储区的数字证书,包括CertOpenSystemStore、CertEnumCertificatesInStore等函数的用法,以及通过CryptUIDlgViewContext和CertGetNameString等获取证书信息的方法,并提供了具体的代码示例来展示如何遍历存储区证书、显示证书和让用户选择证书的过程。
摘要由CSDN通过智能技术生成
 C语言操作WINDOWS系统存储区数字证书 相关函数详解及实例

  以下代码使用C++实现遍历存储区证书及使用UI选择一个证书

  --使用CertOpenSystemStore打开证书存储区.

  --在循环中,使用CertEnumCertificatesInStore.枚举所有存储区中的证书.

  --使用CryptUIDlgViewContext显示一个证书.

  --使用CertGetNameString取得证书主题名称.

  --在循环中,使用CertEnumCertificateContextProperties获取与证书关联的所有属性标识.

  --使用CertGetCertificateContextProperty获取每一个标识值.

  --使用CryptUIDlgSelectCertificateFromStore以UI的方式列出存储区所有证书并提示用户选择其中一个.

  --使用CertCloseStore关闭存储区.

  函数详解

  1.CertOpenSystemStore

  HCERTSTOREWINAPICertOpenSystemStore(

  __inHCRYPTPROV_LEGACYhprov,//CSP句柄,一般设置为NULL

  __inLPTCSTRszSubsystemProtocol//有四种类型,CA:认证机构证书;MY:关联私钥的证书存储区;ROOT:根证书;SPC:SoftwarePublisherCertificate.

  );

  如果成功此函数函数一个证书存储区的句柄,否则返回NULL,证书存储区被打开后所有标准证书存储函数均可使用,使用完毕后请用CertCloseStore关闭存储区

  2.CertEnumCertificatesInStore

  PCCERT_CONTEXTWINAPICertEnumCertificatesInStore(

  __inHCERTSTOREhCertStore,

  __inPCCERT_CONTEXTpPrevCertContext

  );

  hCertStore:存储区句柄

  pPrevCertContext:指向先前创立的证书上下文CERT_CONTEXT结构体,这个参数必须先置为NULL才能获取第一个证书

  3.CryptUIDlgViewContext

  列出一个证书,CTL或CRL上下文

  BOOLWINAPICryptUIDlgViewContext(

  __inDWORDdwContextType,

  __inconstvoidpvContext,

  __inHWNDhwnd,

  __inLPCWSTRpwszTitle,

  __inDWORDdwFlags,

  __invoidpvReserved

  );

  dwContextType:上下文的类型,如下表

  Value/Meaning

  CERT_STORE_CERTIFICATE_CONTEXT/PCCERT_CONTEXT

  CERT_STORE_CRL_CONTEXT/PCCRL_CONTEXT

  CERT_STORE_CTL_CONTEXT/PCCTL_CONTEXT

  pvContext:指向列出的证书,CTL或CRL上下文的指针

  hwnd:窗口显示句柄

  pwszTitle:显示标题字符串

  dwFlags:一般设置为0

  pvReserved:保留

  4.CertGetNameString

  从一个证书的CERT_CONTEXT结构体中取得主题或颁发者名称

  DWORDWINAPICertGetNameString(

  __inPCCERT_CONTEXTpCertContext,

  __inDWORDdwType,

  __inDWORDdwFlags,

  __invoidpvTypePara,

  __outLPTSTRpszNameString,

  __inDWORDcchNameString

  );

  dwType:名称的输出格式

  CERT_NAME_EMAIL_TYPE:如果证书有主题可选
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值