You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 08:30:36