还有一个名为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 商店(我已经以管理员身份执行)创建证书
感谢。
答案 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证书。