powershell是否有工具来创建非自签名证书?

时间:2014-09-02 20:23:08

标签: powershell ssl

还有一个名为New-SelfSignedCertificate的powershell中的工具,我们可以为CA建议创建自签名证书。 但我无法弄清楚是否有可能创建由此New-SelfSignedCertificate之前创建的证书颁发/签署的子证书。实际上,我可以使用makecert.exe执行此操作,但我想在powershell中编写脚本。

例如,在makecert.exe中,我执行以下命令:

 1)Creating the CA cert:  **makecert.exe** -sk RootCA -sky signature -pe -n CN=ca.com -r -sr LocalMachine -ss Root RootCA

 2)Creating another cert for server signed by above CA: **makecert.exe** -sk server -sky exchange -pe -n CN=server.com -ir LocalMachine -is Root -ic RootCA -sr LocalMachine -ss My server.com

在powershell中,我只知道使用该命令创建 CA

  New-SelfSignedCertificate -DnsName "ca.com" -CertStoreLocation cert:Localmachine/My

但是,如何创建上面那个签署的另一个证书?

其他事情,当我尝试把-CertStoreLocation = cert:Localmachine/**Root**我收到一条错误消息,说我只能在 MY 商店(我已经以管理员身份执行)创建证书

感谢。

2 个答案:

答案 0 :(得分:1)

我很抱歉迟到了,我很清楚自问这个问题已经两年了。

但是,与在搜索时可能会找到此条目的人分享 - 现在有一种方法(记录在this excellent blog by David Christiansen上)

总之,

New-SelfSignedCertificate -certstorelocation cert:\localmachine\my -dnsname "Your root CA name here"

记下从此命令返回的指纹。

接下来,创建一个安全密码并将根CA导出到文件

PowerShell的

$pwd = ConvertTo-SecureString -String "Please-Use-A-Really-Strong-Password" -Force -AsPlainText
Export-PfxCertificate -cert cert:\localMachine\my\[CA thumbprint]  -FilePath root-authority.pfx -Password $pwd
Export-Certificate -Cert cert:\localMachine\my\[CA thumbprint] -FilePath root-authority.crt

请注意,crt文件不需要密码,因为它是证书的公共组件。

现在将签名证书加载到内存中,并创建由此证书签名的证书,并使用密码导出。

$rootcert = ( Get-ChildItem -Path cert:\LocalMachine\My\[CA Thumbprint] )
New-SelfSignedCertificate -certstorelocation cert:\localmachine\my -dnsname "Your DNS Name Here" -Signer $rootcert

记下从自签名cert命令返回的指纹以将其导出。

$pwd2 = ConvertTo-SecureString -String "Please-Use-A-Really-Strong-Password" -Force -AsPlainText
    Export-PfxCertificate -cert cert:\localMachine\my\[Cert Thumbprint]  -FilePath gateway-certificate.pfx -Password $pwd2
    Export-Certificate -Cert cert:\localMachine\my\[Cert Thumbprint] -FilePath gateway.crt

答案 1 :(得分:0)

手动记录证书的哈希值似乎很麻烦。这样做比较简单:

    # create root zertificate 
    $rootCert = New-SelfSignedCertificate -CertStoreLocation cert:\localmachine\my -DnsName "Root CA Name";

    # export root certificate 
    [System.Security.SecureString]$rootcertPassword = ConvertTo-SecureString -String "znft5yeL34pxCu3nATlt1gMazX0NM8FVvr9yZOhcS79yJm8kUVjhA17UuWkQOb0u" -Force -AsPlainText;
    [String]$rootCertPath = Join-Path -Path 'cert:\localMachine\my\' -ChildPath "$($rootcert.Thumbprint)";
    Export-PfxCertificate -Cert $rootCertPath -FilePath 'root-authority.pfx' -Password $rootcertPassword; # private key
    Export-Certificate    -Cert $rootCertPath -FilePath 'root-authority.crt';                             # public key

    # use root certificate to sign gateway certificate
    $gatewayCert = New-SelfSignedCertificate -CertStoreLocation cert:\localmachine\my -DnsName "*.example.com","*.example.org" -Signer $rootCert;

    # export gateway certificate
    [System.Security.SecureString]$gatewayCertPassword = ConvertTo-SecureString -String "Xc8FlsHq8hmLnKXk4AaD8ug6HYH2dpSWLjwg9eNeDIK103d3akbd0OccgZZ6bL48" -Force -AsPlainText;
    [String]$gatewayCertPath = Join-Path -Path 'cert:\localMachine\my\' -ChildPath "$($gatewayCert.Thumbprint)";
    Export-PfxCertificate -Cert $gatewayCertPath -FilePath gateway-certificate.pfx -Password $gatewayCertPassword; # private key
    Export-Certificate    -Cert $gatewayCertPath -FilePath gateway.crt;                                            # public key

此外,对于生产环境,您可能希望使用ACMESharp来创建免费的TLS证书。