我一直在尝试创建一个从.crt加载证书的SSL服务器。我已经尝试了X509Certificate.CreateFromCertFile(@".\Secure\Certificate\" + CertName + ".crt");
和cert.import,但都不起作用。在两者上,我都会遇到一个问题"服务器模式SSL必须使用带有相关私钥的证书"。关键在那里!我的目录:
Secure/
Certificate/
ZeusHTTP.crt
ZeusHTTP.csr
ZeusHTTP.key
Plugins/
...
证书是使用OpenSSL创建的。
答案 0 :(得分:1)
简单阅读the docs告诉我们您应该使用通常具有文件后缀p7b的pkcs7文件。您需要将OpenSSL证书转换为此格式,或者找到可以从头开始生成一个的实用程序。
答案 1 :(得分:0)
服务器模式SSL必须使用带有相关私钥的证书“。密钥就在那里......
正如其他人所说,它们必须在同一个文件中。以下是执行此操作的步骤。
<强>第一强>
将ZeusHTTP.crt
复制到ZeusHTTP-chain.crt
:
cp ZeusHTTP.crt ZeusHTTP-chain.crt
<强>第二强>
打开ZeusHTTP-chain.crt
并确保其所有验证服务器证书所需的中间证书。所以你将拥有2个或更多证书:
-----BEGIN CERTIFICATE-----
<server certificate>
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
<intermediate certificate>
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
<intermediate certificate>
-----END CERTIFICATE-----
根据需要添加证书。例如,如果您获得免费的Startcom证书,则需要添加StartSSL's Index of Certs的sub.class1.server.ca.pem
中间版。
需要发送所有证书才能解决PKI中的“哪个目录”问题。它是PKI中一个众所周知的问题,实际上它意味着客户端不知道去哪里获取缺少的中间证书。
<强>第三强>
执行以下操作以生成PKCS 12文件:
openssl pkcs12 -export -in ZeusHTTP-chain.crt -inkey ZeusHTTP.key -out ZeusHTTP.p12
<强>四强>
最后,在IIS上安装证书作为测试。
对于您的代码,我认为您需要将其加载到Certificate2
而不是Certificate
。
另请参阅Stack Overflow上的How to read a .p12 file in my web service和MSDN上的how to create x509 certificate and use it in sslstream。