从CSR获取公钥

时间:2015-05-15 12:04:12

标签: powershell pki

有人可以帮我解决以下问题(使用PowerShell)

我将Base64字符串中的CSR保存到名为$ CSR

的变量中

我想从CSR获取公钥,我想这样做的原因是我想在为Microsoft CA提交CSR时检查公钥(因此私钥)没有被重用。我的想法是基本上从CA获取具有相同主题名称(如果存在)的证书副本,并再次检查其公钥。

所以我需要从CSR中获取公钥,所以到目前为止我已经完成了以下内容

$RequestX = New-Object ComObjectX509enrollment.CX509CertificateRequestPkcs10 $ RequestX.InitializeDecode($ CSR,6) `$ RequestX.PublicKey

而不是返回公钥本身,我得到一个com对象。我是否必须使用此com对象的反射来提取公钥? 有没有更简单的方法? (我可以使用certutil和一些正则表达式但不愿意)

谢谢大家 E Brant

1 个答案:

答案 0 :(得分:1)

我弄清楚了我的混乱等等......

所以我的目标是将CSR中的公钥与现有证书中的公钥进行比较,看看它们是否匹配(现在可能更容易了,但现在我得到了它)

$CSR = @"
<CSR here in base64>
"@

$ObjXX = [System.Security.Cryptography.X509Certificates.X509Certificate2]::CreateFromCertFile("C:\CSR\Cert-TestSite.cer")

$X = [System.Convert]::ToBase64String($ObjXX.GetPublicKey())

$RequestX = New-Object -ComObject X509enrollment.CX509CertificateRequestPkcs10 

$RequestX.InitializeDecode($CSR,6)

$Y = $RequestX.PublicKey.EncodedKey() -replace "`r`n"

Compare-Object $X $Y