如何使用PSPKI的Submit-CertificateRequest不存储CSR到文件提交请求
问题描述
我正在使用PowerShell PKI模块(PSPKI)管理企业ADCS证书,已开发基于PS脚本的工具以提升便利性、节省时间。目前签发证书时,使用Submit-CertificateRequest命令需通过-Path参数传入存储在文件中的CSR,命令示例为:
Submit-CertificateRequest -Path $csrFileName -CertificationAuthority $cca -Attribute "CertificateTemplate:$certificateTemplate"
这意味着每次在脚本中提供CSR时,都必须先将其存储到文件,再执行命令签发证书,最后删除CSR文件,流程繁琐。我希望去掉这一环节,请问:
- 是否可以不将CSR存储到文件就直接作为输入传入该命令?
-Path参数是必填项,有没有办法规避文件存储? - 有没有更好的无文件提交证书请求的方式?优先希望通过现有PSPKI命令实现。
解决方案
方法1:使用PSPKI的-Request参数直接传入CSR对象(推荐)
Submit-CertificateRequest存在一个未在基础帮助中重点说明的参数集,支持直接传入X509CertificateRequest类型的对象,完全跳过文件存储步骤:
- 将内存中的CSR文本(PEM格式)转换为
X509CertificateRequest对象:
# 假设$csrContent是你已获取到的CSR文本内容 $csrBytes = [System.Text.Encoding]::UTF8.GetBytes($csrContent) $csrRequest = New-Object System.Security.Cryptography.X509Certificates.X509CertificateRequest($csrBytes)
- 直接提交请求:
Submit-CertificateRequest -Request $csrRequest -CertificationAuthority $cca -Attribute "CertificateTemplate:$certificateTemplate"
你可以通过Get-Command Submit-CertificateRequest -Syntax查看完整参数集,确认该重载的存在。注意需确保PSPKI版本在2.0及以上,旧版本可通过Install-Module PSPKI升级。
方法2:使用certreq.exe配合管道(替代方案)
若因特殊情况无法使用PSPKI的上述参数,可通过Windows自带的certreq.exe结合PowerShell管道实现无文件提交:
$csrContent | certreq -submit -config "$($cca.Name)\$($cca.ComputerName)" -attrib "CertificateTemplate:$certificateTemplate" -
命令中的-表示从标准输入读取CSR内容,无需写入任何临时文件。
内容的提问来源于stack exchange,提问作者user1563721
相关产品推荐
相关产品推荐

