windows PowerShell PKI模块(PSPKI)Submit-CertificateRequest不将CSR存储在文件中

ezykj2lf  于 2023-11-21  发布在  Windows
关注(0)|答案(1)|浏览(138)

我正在使用PowerShell PKI模块来管理我在企业ADCS上的证书。我已经创建了一个简单的工具,它使用PS脚本来更好地方便和保存一些时间。
在颁发证书时,我使用Submit-CertificateRequest命令,该命令通过-Path参数将存储在文件中的CSR作为输入:

  1. Submit-CertificateRequest -Path $csrFileName -CertificationAuthority $cca -Attribute "CertificateTemplate:$certificateTemplate"

字符串
这意味着每当我在脚本中提供CSR时,我需要首先将其存储在文件中,然后使用命令颁发证书,然后删除带有CSR的文件。这是我想消除的复杂性。
有没有什么方法可以提供CSR作为命令的输入而不将其存储在文件中?-Path参数是必需的,我需要某种引用文件,该文件将用作CSR来颁发证书。我可以避免吗?有没有更好的方法可以提交请求而不将其存储在文件中?
我的主要接口是PowerShell,如果这对当前的PSPKI命令是可行的,那就太好了。

70gysomp

70gysomp1#

你可以模拟Submit-CertificateRequest的功能,但它可能比将其 Package 在函数中要长:

  1. $req = "
  2. -----BEGIN NEW CERTIFICATE REQUEST-----
  3. MIICZzCCAdACAQAwETEPMA0GA1UEAwwGVGVzdFBTMIGfMA0GCSqGSIb3DQEBAQUA
  4. A4GNADCBiQKBgQCoSlRfphyVgWrwEPipstSe1pr4+mDOhBDP2ZJPsAevoTTQqt9x
  5. iOnJnfPMLBWEiqYmPklf9WKBkzLKeC2RfE3a8FGNhRBZb3Vzj8PvBoCMc63hvy+i
  6. q5hwVWDnWm96mpk+F3ykB60JWAAzL9vY+w2U6kAUQYo8/RPMZ1bLLCV0XQIDAQAB
  7. oIIBFDAcBgorBgEEAYI3DQIDMQ4WDDEwLjAuMTc3NjMuMjBABgkrBgEEAYI3FRQx
  8. MzAxAgEFDA5jYTIudzJrMTkudGVzdAwTVzJLMTlcYWRtaW5pc3RyYXRvcgwHTU1D
  9. LkVYRTBKBgkqhkiG9w0BCQ4xPTA7MBoGA1UdEQQTMBGCD3d3dy5leGFtcGxlLm9y
  10. ZzAdBgNVHQ4EFgQUsDOyEAUoOyC7dIdbbKZDNiSMXI8wZgYKKwYBBAGCNw0CAjFY
  11. MFYCAQAeTgBNAGkAYwByAG8AcwBvAGYAdAAgAFMAbwBmAHQAdwBhAHIAZQAgAEsA
  12. ZQB5ACAAUwB0AG8AcgBhAGcAZQAgAFAAcgBvAHYAaQBkAGUAcgMBADANBgkqhkiG
  13. 9w0BAQsFAAOBgQArPgWJ77GxhDlVLXQT2yB2XZh+SVCewDYjoBuqjnSQWFjpS5uB
  14. ZK1XTNIYCCfb1uPgLxlB17cEd8/gZrLrOr9zwGEsOcqSL9LaaetEbkq5qPhfAvi0
  15. e3DXpZ0BDkneYHGNKR5GPBuKMcKHgMkDPqj/kMgl7LFIfkR4St3ffoeF3Q==
  16. -----END NEW CERTIFICATE REQUEST-----
  17. "
  18. $CertConfig = New-Object -ComObject CertificateAuthority.Config
  19. $ConfigString = $CertConfig.GetConfig(1)
  20. $CertRequest = New-Object -ComObject CertificateAuthority.Request
  21. $Status = $CertRequest.Submit(0,$req,"CertificateTemplate:WebServer",$ConfigString)

字符串
请注意,上面的内容是公然抄袭了Submit-CertificateRequestweb page的作者(我写这篇文章的时候它是离线的,所以这里有一个cached version)。
GetConfig()方法接受一个参数:
| 值|意义|
| --|--|
| CC_DEFAULTCONFIG 0x0000000|检索默认证书颁发机构。|
| CC_UIPICKCONFIG 0x0000001|显示允许用户选择证书颁发机构的用户界面。|
| CC_FIRSTCONFIG 0x0000002|返回第一个证书颁发机构。|
| CC_LOCALACTIVECONFIG 0x0000004|检索正在运行的本地证书颁发机构。|
| CC_LOCALCONFIG 0x0000003|检索本地证书颁发机构。|
| CC_UIPICKCONFIGSKIPLOCALCA 0x0000005|显示允许用户选择证书颁发机构的用户界面。该用户界面不包括任何本地证书颁发机构。在将从属证书颁发机构证书请求提交给当前证书颁发机构以外的证书颁发机构时,此排除在从属证书颁发机构证书续订期间很有用。|
如果您事先知道CA Config字符串,则可以将其简化为两行:

  1. $CertRequest = New-Object -ComObject CertificateAuthority.Request
  2. $Status = $CertRequest.Submit(0,$req,"CertificateTemplate:WebServer","ca1.example.org\Example CA1")

展开查看全部

相关问题