使用私钥加入SSL .crt证书以与WCF的Net.Tcp绑定一起使用

时间:2014-01-16 18:43:48

标签: wcf ssl net.tcp

我有.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。虽然在某些情况下这个可以成为问题,但事实证明这不是我的根本原因。

这个问题的根本原因是什么以及如何解决?

1 个答案:

答案 0 :(得分:12)

问题是从.spc创建的证书作为中间格式,因为遵循步骤in this answer会导致丢失KeyExchange标记。

使用私钥加入.crt的正确方法是使用.pem格式的私钥,如下所示:

  1. 从GoDaddy获取新的Ssl.crt证书。
  2. 从过期的PFX中导出PEM格式的私钥:

    openssl.exe pkcs12 -in ExpiredSslCert.pfx -nocerts -out SslPrivateKey.pem
    
  3. 将CRT和PEM合并到PFX中:

    openssl.exe pkcs12 -export -in SslCert.crt -inkey SslPrivateKey.pem -out FullCert.pfx
    
  4. 生成的.pfx现在具有 KeyExchange标志,适用于WCF Net.Tcp绑定。