繁体   English   中英

如何获取颁发者证书的指纹或公钥?

[英]How to get Thumbprint or Public Key of Issuer Certificate?

我们创建了一个自签名 CA 证书,我们用它来签署其他证书以用于 SSL 目的。 这些证书将安装在我们无法访问的其他服务器中,并将严格与其他客户端(如移动应用程序)进行通信。

当这些客户端(用 .NET 编写)使用 HTTPS 向服务器发出请求时,我们会收到“从服务器收到的无效证书”错误,因为 CA 证书不是该客户端上的受信任 CA。

我们想使用ServicePointManager.ServerCertificateValidationCallback绕过这种安全性,但前提是所使用的证书是由我们的 CA 证书签名的。

我可以检查certificate.Issuer ,但这很容易被任何人欺骗。 如何获取无效证书的颁发者证书的指纹或公钥? 如果我可以访问它,我可以轻松地将它与我知道的有效的进行比较,并忽略证书错误并继续请求。

更新

我想我越来越近了。 看起来我们想要做的事情是不可行的,所以方向略有不同。

使用X509Chain ,我们可以使用以下代码验证证书是否是 CA 的子证书:

var caCert = new X509Certificate2(@"[path]\MyCA.cer");

var newChain = new X509Chain();
newChain.ChainPolicy.RevocationMode = X509RevocationMode.NoCheck;
newChain.ChainPolicy.ExtraStore.Add(caCert);

var res = newChain.Build(certInQuestion);

Build()仍然返回 false (正如预期的那样,因为 CA 在客户端上不受信任),但现在newChain.ChainStatus[0].Status正在返回UntrustedRoot 根据我的测试,这意味着链经过验证,因为如果我提供不同的 CA 证书,它会因InvalidChain而失败。

总之,这告诉我,如果 Status 是UntrustedRoot ,则证书使用我们的 CA 证书创建的,因此它是有效的,否则它是假的!

我的假设正确吗?

我不完全确定这就是您正在寻找的东西,但它可能会将您推向正确的方向。 这是我用来查找刚刚使用 MAKECERT.EXE 和 CERTMGR.EXE 创建和提取的证书的 PowerShell 脚本:

# get certificate thumbprint
$appCertificate = Get-PfxCertificate -FilePath $certificateFullPath

Write-Host "  .. adding certificate to local machine root" -ForegroundColor Gray 
& $ExeCertManager /add $certificateFullPath /s /r localMachine root
Write-Host "  Certificate installed on local machine" -ForegroundColor Gray 

Write-Host "  .. exporting private key for certificate" -ForegroundColor Gray 
Get-ChildItem cert:\\localmachine\my | Where-Object {$_.Thumbprint -eq $appCertificate.Thumbprint} | ForEach-Object {
    $CertPfxName = (Get-Item -Path $certificateFullPath).BaseName
}

那是错误的解决方案。 您应该在所有客户端中将您的自签名证书安装为受信任的 CA 证书,或者最好还是让已受信任的 CA 对其进行签名。 不要为此编写代码。

根据以下答案,似乎一个可能的解决方案是您可以通过电子邮件发送证书: https ://stackoverflow.com/a/4473799/674700。

以下是一些信息链接和一些生成免费公钥和私钥的工具:

https://www.igolder.com/pgp/

https://www.igolder.com/pgp/generate-key/

我认为 EJP 的解决方案是最能接受的。 @EJP,您能否给我们一些可以帮助我们成为“微型 CA”的应用程序示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM