使用PowerShell创建代码签名证书后签名EXE提示PFX密码错误,求排查
自签名代码签名证书SignTool密码错误问题解决
你遇到的SignTool Error: The specified PFX password is not correct错误,核心原因是参数类型不匹配:
Export-PfxCertificate需要SecureString类型的密码,你用ConvertTo-SecureString处理是正确的;- 但SignTool的
/p参数要求传入明文密码,你直接传递$certificatePassword(SecureString加密对象),SignTool无法解析这个格式,因此判定密码错误。
修正方案一:直接使用明文密码变量
修改SignTool命令,直接调用最初定义的明文密码变量即可:
$password = "password" $certificate = New-SelfSignedCertificate -DnsName "MyCompany, Dev" -Type CodeSigning -CertStoreLocation Cert:\CurrentUser\My $certificatePassword = ConvertTo-SecureString -String $password -Force –AsPlainText Export-PfxCertificate -Cert "cert:\CurrentUser\My\$($certificate.Thumbprint)" -FilePath "C:\Users\me\Project\CSCDev.pfx" -Password $certificatePassword # 改用明文密码变量$password SignTool sign /f "C:\Users\me\Project\CSCDev.pfx" /p $password "C:\Users\me\Project\MyCompanyApp.exe"
修正方案二:将SecureString转回明文(更安全)
如果不想直接暴露明文密码,可以把生成的SecureString转换回明文后再传给SignTool:
$password = "password" $certificate = New-SelfSignedCertificate -DnsName "MyCompany, Dev" -Type CodeSigning -CertStoreLocation Cert:\CurrentUser\My $certificatePassword = ConvertTo-SecureString -String $password -Force –AsPlainText Export-PfxCertificate -Cert "cert:\CurrentUser\My\$($certificate.Thumbprint)" -FilePath "C:\Users\me\Project\CSCDev.pfx" -Password $certificatePassword # 把SecureString转换为明文 $plainTextPassword = [System.Net.NetworkCredential]::new("", $certificatePassword).Password SignTool sign /f "C:\Users\me\Project\CSCDev.pfx" /p $plainTextPassword "C:\Users\me\Project\MyCompanyApp.exe"
额外注意点
- 注意SignTool参数顺序:
/p需要紧跟密码值,再指定要签名的exe文件(原命令中/p放在exe路径后,虽部分场景可运行,但规范写法是先配置签名参数,再指定目标文件); - 自签名证书默认不受系统信任,签名后的exe运行时会弹出安全警告,若要消除警告,需将证书导入到本地计算机的「受信任的根证书颁发机构」存储中。
内容的提问来源于stack exchange,提问作者mike
相关产品推荐
相关产品推荐

