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

Ond*_*cny 16 ssl wcf net.tcp

我有.crt格式的GoDaddy颁发的SSL证书.此外,我还有以前过期的证书,其.pfx格式包括私钥.

现在我遇到了将原始私钥与颁发的证书相连以形成.pfx适合安装到Windows证书库的文件的问题.

我按照我在类似情况下成功使用的步骤来生成代码签名证书(在此Q/A对中记录在SO上).生成的证书适用于HTTPS,但不适用于WCF的Net.Tcp端点.使用此端点时,由于以下错误,无法初始化:

ArgumentException:证书'CN = domain.com,O ="Company",L = Abc,S = Abc,C = XY'可能没有能够进行密钥交换的私钥,或者该流程可能没有私钥的访问权限.详情请见内部异常.

一些消息来源声称有必要使用www.domain.com而不是domain.com.虽然在某些情况下这可能是问题,但事实证明这不是我的根本原因.

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

Ond*_*cny 13

问题是从.spc作为中间格式创建的证书,由于遵循此答案中的步骤导致丢失该KeyExchange标志.

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

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

    openssl.exe pkcs12 -in ExpiredSslCert.pfx -nocerts -out SslPrivateKey.pem
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将CRT和PEM结合到PFX中:

    openssl.exe pkcs12 -export -in SslCert.crt -inkey SslPrivateKey.pem -out FullCert.pfx
    
    Run Code Online (Sandbox Code Playgroud)

所产生的.pfx现在拥有KeyExchange标志,并适用于WCF的net.tcp绑定.