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

Posted

技术标签:

【中文标题】使用私钥加入 SSL .crt 证书以用于 WCF 的 Net.Tcp 绑定【英文标题】:Joining an SSL .crt certificate with a private key for use with WCF's Net.Tcp binding 【发布时间】:2014-02-05 20:36:11 【问题描述】:

我有一个 GoDaddy 颁发的 .crt 格式的 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】:

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

用私钥加入.crt的正确方法是使用.pem格式的私钥,像这样:

    从 GoDaddy 获取新的 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 绑定。

【讨论】:

以上是关于使用私钥加入 SSL .crt 证书以用于 WCF 的 Net.Tcp 绑定的主要内容,如果未能解决你的问题,请参考以下文章

openssl生成ssl证书

Azure 的 SSL 证书

SSL中,公钥,私钥,证书的后缀名都是些什么

ssl证书 只有crt文件 但是使用时需要key或pem文件 请问如何转换

openssl将私钥和crt证书合成pfx证书

openssl将私钥和crt证书合成pfx证书