使用PowerShell在两台服务器之间传递安全文本

时间:2018-06-13 07:48:46

标签: powershell

我正在处理将证书从服务器A导出到PFX的脚本,将其复制到服务器B并将PFX导入服务器。 我使用以下代码将密码从纯文本加密到安全字符串:

$pfxPass = "PassW0rd"
$File = "D:\backup_conf\Password.txt"
[Byte[]] $key = (1..16)
$pfxSecure = $pfxPass | ConvertTo-SecureString -AsPlainText -Force
$pfxSecure | ConvertFrom-SecureString -key $key | Out-File $File
dir Cert:\LocalMachine\my | Where-Object { $_.NotAfter -clike "*2019*"} | % { certutil.exe -f -exportPFX -p $pfxSecure $_.Thumbprint D:\backup_conf\certificates\$($_.Thumbprint).pfx }

创建了PFX,我可以看到Password.txt包含哈希字符串。 PFX和Password.txt被复制到新服务器上,我使用以下代码进行导入:

$file = "D:\backup_conf\Password.txt"
[Byte[]] $key = (1..16)
$pfxSecure = Get-Content $File | ConvertTo-SecureString -Key $key
$certs = (Get-ChildItem -recurse -Path  "D:\backup_conf\certificates" -Include *.pfx)|%{Import-PfxCertificate $_.FullName -Exportable -Password $pfxSecure -CertStoreLocation Cert:\LocalMachine\My }

这个失败并出现错误:

Import-PfxCertificate:您尝试导入的PFX文件需要不同的密码或Active中的成员身份 受保护的目录主体。

知道它为什么不起作用吗?

1 个答案:

答案 0 :(得分:1)

当您在SecureString使用certutil.exe -f -exportPFX -p $pfxSecure对象时certutil.exe System.Security.SecureString 无法正确识别它。密码将按字面意思

SecureString

对于cmd应用程序,certutil.exe不是它可以处理的内容,因此您必须将其转换为纯文本,然后将其传递给SecureString

示例如何将$SecurePassword = ConvertTo-SecureString $pfxPass $BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecurePassword) $UnsecurePassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR) 转换为纯文本(source):

flatMap