2014-04-25 256 views
1

我一直在尝试创建一个SSL服务器,该服务器从.crt加载证书。我已经尝试了两个X509Certificate.CreateFromCertFile(@".\Secure\Certificate\" + CertName + ".crt");和cert.import,并且都不起作用。在两者上,我遇到一个问题:“服务器模式SSL必须使用带有关联私钥的证书”。关键在于!我的目录:验证证书TLS/SSL服务器

Secure/ 
    Certificate/ 
     ZeusHTTP.crt 
     ZeusHTTP.csr 
     ZeusHTTP.key 
    Plugins/ 
     ... 

证书是使用OpenSSL创建的。

+0

如果指定绝对路径,该怎么办?附注:我已经从你的文章中删除了“搜索很多”/“谢谢你”的文字 - 尽量不要将它添加到你的文章中,因为他们很少提供任何额外的细节。 –

+0

@AlexeiLevenkov我确实尝试过。我确实得到了一个可行的答案。另外,我把我搜索了很多,因为我不喜欢没有搜索就问的人,它可能看起来像那样。 – Zeusoflightning125

+0

您的问题已经显示出一些研究结果,并包含足够的详细信息来诊断问题。 “你有没有搜索过任何东西”评论通常在问题没有显示任何努力/细节时提出 - 增加“搜索了很多”不会突然提出问题而没有细节问题,也不会显示努力寻找答案。 –

回答

1

简单阅读the docs告诉我们您应该使用通常带有文件后缀p7b的pkcs7文件。您需要将您的OpenSSL证书转换为此格式,或者找到可从头开始生成的实用程序。

+1

私钥证书不能包含在p7b文件中。你的回答不会解决OP的问题。 –

+1

文档也不正确(有时会发生这种情况,是的) - “可以使用任何PKCS7签名的文件,包括Authenticode签名的.pfx文件。” - Authenticode使用PKCS#7进行签名,但.pfx不是“Authenticode”,而是PKCS#12。 –

0

服务器模式SSL必须使用证书与关联的私钥”,关键是有...

至于其他已经表示,他们必须在同一个文件。这里有步骤去做

首先

复制ZeusHTTP.crtZeusHTTP-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


另请参见MSDN上How to read a .p12 file in my web service在堆栈溢出或how to create x509 certificate and use it in sslstream

相关问题