提问人:Buchi Ani 提问时间:11/10/2023 最后编辑:James ZBuchi Ani 更新时间:11/11/2023 访问量:57
PowerShell ConvertTo-Securestring
PowerShell ConvertTo-Securestring
问:
我是 powershell 的新手,所以请耐心等待我。
我正在努力创建一个脚本,该脚本可以在 PowerShell 中生成密码以导出 PFX 证书。首先,我调用了新函数来生成密码,如下所示
function Generate-RandomPassword{
param (
[Parameter(Mandatory)]
[int] $length
)
#$charSet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789{}+[]*=:()$^%;_!&#?>.'.ToCharArray()
$charSet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'.ToCharArray()
$rng = New-Object System.Security.Cryptography.RNGCryptoServiceProvider
$bytes = New-Object byte[]($length)
$key = New-Object Byte[] 16
$rng.GetBytes($bytes)
$result = New-Object char[]($length)
for ($i = 0 ; $i -lt $length ; $i++) {
$result[$i] = $charSet[$bytes[$i]%$charSet.Length]
}
return (-join $result)
}
然后我曾经生成密码并将随机密码通过管道传送到文件系统进行存储,这工作正常Generate-RandomPassword 16 | Set-Content -Path C:\PFX\certs\PASSWORD.txt
其次,我打算使用变量来存储我打算导出的证书的公用名。这指定了 CERT:逻辑驱动器、计算机帐户,然后是个人身份存储,然后此处的参数指示我使用以下命令将目标为 CN$CertfilePath
-dnsname
$CertFilePath = Get-ChildItem -Path Cert:LocalMachine\MY -dnsname *TARGET*
最后,我希望能够接受管道输入,但是该参数是必需的,并且是这里的症结所在,它是用于转换明文的字节的 #:128、192 或 256 位是有效选项。请注意,整数降低到 16,16*8=正好是 128 位。我试图缩短它以实现兼容性以适应 128 的字节数组长度,但是关于我如何填充此键值的某些内容不正确,如下所示ConvertTo-SecureString
-key
Generate-RandomPassword
$PfxExportPassword = get-content -path C:\PFX\certs\PASSWORD.txt | ConvertTo-SecureString -key 32
当我运行上述操作时,我收到以下错误
ConvertTo-SecureString:指定的密钥无效。有效的密钥长度设置为 128 位、192 位或 256 位。 在行:1 字符:80
答:
0赞
Alin Ciovica
11/10/2023
#1
尝试将其导出为-AsPlainText,然后查看Export-PfxCertificate是否接受$PfxExportPassword作为密码参数。
$PfxExportPassword = Get-Content -Path C:\PFX\certs\PASSWORD.txt | ConvertTo-SecureString -AsPlainText -Force
评论
-key
SecureString
Export-PfxCertificate
$PfxExportPassword = New-Password -Length 16 -AsSecureString