【问题标题】:Validate certificate in C#在 C# 中验证证书
【发布时间】:2014-07-29 06:46:46
【问题描述】:

由于 Windows 8 应用程序的限制,我无法使用 System.Security 库。我需要使用 Windows.Security.Cryptography 并且需要验证证书(.cer 文件)和密钥(.key 文件)是否是有效的一对。

我已经在读取文件并创建一个新的证书实例:

Windows.Security.Cryptography.Certificates.Certificate objCert = new Windows.Security.Cryptography.Certificates.Certificate(stream);

stream 是作为 IBuffer 的 .cer 文件。

我可以提取 .cer 文件的一些属性,例如过期或颁发者,但我无法获取用于签名的密钥,并将其与 .key 文件中包含的密钥进行比较。

【问题讨论】:

  • 密钥是干什么用的?是发行者的签名密钥,还是主体公钥的私钥?
  • "...但我无法获得用于签名的密钥..." - 对。您应该无法访问颁发者的私钥,因为它是私钥:) 颁发者保留私钥/签名密钥,并分发公钥。与 PID 所说的类似,您能做的最多可能是针对授权密钥标识符 (AKI) 进行一些测试。

标签: c# visual-studio ssl windows-8


【解决方案1】:

您不应该比较这些键。您通常会比较它们的哈希码。之所以如此,是因为您不会泄露私钥。

证书具有私钥的哈希码。从密钥文件中,您可以计算相同的哈希码。一旦你有了两个哈希码,你就可以比较它们。

GetCertHashString()

不要将私钥放在 cer 文件中,只保留公钥和私钥的哈希值。

也看这里:How to validate X509 certificate?

【讨论】:

  • “如何验证 X509 证书...” - System.Security 不可用。
  • 抱歉,“不可用”是什么意思?在哪里?在你的大会上?请说的更具体一些,我不明白你的意思:)
  • 问题说明 “我无法使用 System.Security ibrary...”。出于特定原因,您必须询问 user2868383。我可以使用 OpenSSL(而不是 System.Security)提供答案,但我需要先知道他/她有什么密钥。
  • 啊,好的 :) 我错过了,感谢您指出。好吧……那么……没有骰子!
  • Windows 8 应用程序不支持 System.Security.Cryptography 类。查看 MSDN 页面(System.Security.Cryptography 命名空间):msdn.microsoft.com/en-us/library/9eat8fht.aspx[^] 如果 Windows 8 应用程序支持某个类,那么最左边的列中会显示一个绿色小手提箱。我可以使用 Windows.Security.Cryptography
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-30
  • 2021-07-22
  • 2019-06-14
相关资源
最近更新 更多