我觉得这应该不是那么难,但我会疯狂试图让它发挥作用。我发现了很多不同的东西,似乎没有什么工作。
我正在尝试使用.pfx文件签署WPF程序集。如果我尝试使用原始文件,我会收到“找不到用于解密的证书和私钥。”
如果我导入密钥并再次导出,取消选择“如果可能,请在证书路径中包含所有证书”,它似乎可以正常工作。当我去构建时,我得到“错误1无法导入以下密钥文件:my_key.pfx。密钥文件可能受密码保护。要更正此问题,请尝试再次导入证书或手动将证书安装到强名称CSP使用以下密钥容器名称:“
我可以将ClickOnce清单标记为罚款,而不是汇编。关于如何使这项工作的任何建议?
答案 0 :(得分:6)
我遇到了类似的问题,经过多年的C#开发(VS 2005到2012),从未设法找到一种方法,使用证书颁发机构的.pfx文件来编写项目属性的代码。代码签名有程序集属性和项目设置,所有这些都会相互干扰,而且都不起作用。项目属性表格要求输入pfx的密码(似乎没有存储在任何地方)然后签名失败,因为密码被破坏了。我怀疑MS上的任何人都没有实际使用此代码签名功能和购买的证书,只有VS在本地创建的自签名证书。
如果你想混淆你的代码,你还必须在混淆之后对它进行签名,所以你不能使用这些方法,即使它们有效。
我发现唯一可靠的解决方案是使用signtool.exe作为构建后步骤。一旦你设置好了,你可能不再关心是否有更好的方法。
当您购买证书时,它通常会直接安装到您的PC证书存储区中,因此您可以在构建后的步骤中直接从商店对其进行代码签名,如下所示:
"C:\Program Files (x86)\Windows Kits\8.0\bin\x64\signtool" sign
/n CertificateName
/tr http://timestamp.comodoca.com/rfc3161
"$(TargetPath)"
注意:
或者使用.pfx文件:
"C:\Program Files (x86)\Windows Kits\8.0\bin\x64\signtool" sign
/f CertificateFile.pfx /p Password
/tr http://timestamp.comodoca.com/rfc3161
"$(TargetPath)"
(其中CertificateFile.pfx是pfx文件,“Password”是使用该文件的密码。要从证书存储区中获取pfx文件,请运行“certmgr.msc”并查找证书(可能是在Personal中) \证书),右键单击它并选择所有任务>导出...)
超级简单。为什么互联网上的任何人都没有(例如,出售这些东西的认证机构),首先只是说这个?!
答案 1 :(得分:0)
如果您使用 Cygwin 或 WSL,您也可以创建这样的示例密钥:
user@DevLaptop /tmp
$ openssl genrsa -des3 -out www.mycompany.com.key 1024
Generating RSA private key, 1024 bit long modulus (2 primes)
.+++++
.+++++
e is 65537 (0x010001)
Enter pass phrase for www.mycompany.com.key:
Verifying - Enter pass phrase for www.mycompany.com.key:
user@DevLaptop /tmp
$ openssl req -new -key www.mycompany.com.key -out www.mycompany.com.csr
Enter pass phrase for www.mycompany.com.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:HK
State or Province Name (full name) []:HKSAR
Locality Name (eg, city) [Default City]:Hong Kong
Organization Name (eg, company) [Default Company Ltd]:My Company
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:My Company
user@DevLaptop /tmp
$ openssl x509 -req -days 365 -in www.mycompany.com.csr -signkey www.mycompany.com.key -out www.mycompany.com.crt
Signature ok
subject=C = CA, ST = AB, L = Hong Kong, O = My Company
Getting Private key
Enter pass phrase for www.mycompany.com.key:
user@DevLaptop /tmp
$ ls *.key
www.mycompany.com.key
user@DevLaptop /tmp
$ openssl pkcs12 -export -out MyCompany.pfx -inkey www.mycompany.com.key -in www.mycompany.com.crt -certfile www.mycompany.com.crt
Enter pass phrase for www.mycompany.com.key:
Enter Export Password:
Verifying - Enter Export Password:
详情请见:
How to convert .crt cetificate file to .pfx
https://www.thegeekstuff.com/2009/07/Linux-Apache-mod-ssl-generate-key-csr-crt-file/