有人可以帮我解决以下问题(使用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
答案 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