使用私钥加入 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 绑定的主要内容,如果未能解决你的问题,请参考以下文章