我有.crt
格式的GoDaddy颁发的SSL证书。此外,我还有.pfx
格式的先前过期证书,其中包含私钥。
现在我遇到了将原始私钥与已颁发的证书相连以形成适合安装到Windows证书库的.pfx
文件的问题。
我遵循了在类似情况下成功使用的步骤,以生成代码签名证书(在this Q/A pair on SO中记录)。生成的证书适用于HTTPS,但不适用于WCF的Net.Tcp端点。使用此类端点时,由于以下错误,无法初始化:
ArgumentException:证书'CN = domain.com,O =“Company”,L = Abc,S = Abc,C = XY'可能没有能够进行密钥交换或进程的私钥可能没有私钥的访问权限。有关详细信息,请参阅内部异常。
Some sources声称有必要使用www.domain.com
代替domain.com
。虽然在某些情况下这个可以成为问题,但事实证明这不是我的根本原因。
这个问题的根本原因是什么以及如何解决?
答案 0 :(得分:12)
问题是从.spc
创建的证书作为中间格式,因为遵循步骤in this answer会导致丢失KeyExchange
标记。
使用私钥加入.crt
的正确方法是使用.pem
格式的私钥,如下所示:
Ssl.crt
证书。从过期的PFX中导出PEM格式的私钥:
openssl.exe pkcs12 -in ExpiredSslCert.pfx -nocerts -out SslPrivateKey.pem
将CRT和PEM合并到PFX中:
openssl.exe pkcs12 -export -in SslCert.crt -inkey SslPrivateKey.pem -out FullCert.pfx
生成的.pfx
现在具有 KeyExchange
标志,适用于WCF Net.Tcp绑定。