带密码的Import-Pfx证书-部署

时间:2019-06-04 22:15:08

标签: powershell windows-10

我想推出一个带有私钥密码的证书。我知道它不安全。一个更安全的方法将是很好。但是我不知道该怎么做。

$test = ConvertTo-SecureString -String "plaintextpassword" -Force -AsPlainText<code>

Import-PfxCertificate -FilePath $filelocale -CertStoreLocation Cert:\LocalMachine\My -Password $test

获取:Import-PfxCertificate:您尝试导入的PFX文件要求使用不同的密码或Active Directory主体的成员身份 受保护的。

如果我在下面跑,就可以了

$test = Get-Credential -UserName 'enter pwd' -Message "Enter PWD"

Import-PfxCertificate -FilePath $filelocale -CertStoreLocation Cert:\LocalMachine\My -Password $test.Password

1 个答案:

答案 0 :(得分:2)

由于使用凭据对象可以解决问题,因此无需使用提示即可创建凭据:

$Pass = ConvertTo-SecureString -String 'plaintextpassword' -Force -AsPlainText
$User = "whatever"
$Cred = New-Object -TypeName "System.Management.Automation.PSCredential" -ArgumentList $User, $Pass
Import-PfxCertificate -FilePath $filelocale -CertStoreLocation Cert:\LocalMachine\My -Password $Cred.Password

请注意我用来阻止PowerShell解释输入的单引号。这对于带符号的密码尤为重要。如果在“ plaintextpassword”周围使用双引号时使用凭据对象不起作用,则可能是问题仅在于您输入的内容而不是最终结果中的实际内容。

如果您要自己检查,可以使用基于“ Working with Passwords, Secure Strings and Credentials in Windows PowerShell”的以下内容。绝对值得一读。

$Pass = ConvertTo-SecureString -String "plaintext$_password" -Force -AsPlainText
$User = "whatever"
$Cred = New-Object -TypeName "System.Management.Automation.PSCredential" -ArgumentList $User, $Pass
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($Cred.Password)
$PlainPassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
$PlainPassword

请特别注意使用双引号和引起问题的其他$_。如果您使用的是最新的PowerShell或其他具有突出显示功能的工具,则颜色格式可帮助您及早发现问题。您可能会明白我的意思。