使用OpenSSL证书的WCF服务

时间:2009-10-13 20:02:55

标签: wcf certificate openssl

我已经使用makecert生成的基本自签名证书(使用关于该主题的许多在线教程中的一些)运行我的WCF Web服务但是发现在生成makecert不具有的证书时我们需要某些功能似乎处理。因此,我正在尝试使用OpenSSL创建我的证书,使用我们自己的CA(也使用OpenSSL生成)对其进行签名。我似乎正在创建和注册证书,但当我尝试查询Web服务时,我得到以下内容:

证书'[Cert Details]'必须有私钥。该进程必须具有私钥的访问权限。

尽管我可能尝试,我似乎无法让系统识别我认为的私钥(也许我完全错了,我应该完全看另一个文件......)任何人都可以提供一些关于我可能出错的地方的圣人建议?

我正在生成证书:

# Generate key and certificate request
openssl req -new -newkey rsa:1024 -nodes -keyout MyCompany.key -out MyCompany.csr

# Generate certificate from certificate request
openssl ca -batch -in MyCompany.csr -out MyCompany.cert

然后我可以在机器证书存储区注册“Mycompany.cert”(在这种情况下,服务器和客户端都在localhost上运行),但MyCompany.key(我假设是私钥,是吗?)将不会导入,总是引用未知的文件格式。注册是通过带有证书管理单元的“mmc”实用程序完成的。

在我的客户端和服务器的Web.Config文件中,然后将以前(工作)的证书名称换成我的新证书的名称:

<!-- Client Web.config -->
<clientCredentials>
    <serviceCertificate>
        <authentication certificateValidationMode="PeerOrChainTrust"/>
    </serviceCertificate>
    <clientCertificate findValue="MyCompany" storeLocation="CurrentUser" storeName="TrustedPeople" x509FindType="FindBySubjectName" />
</clientCredentials>

<!-- Server Web.config -->
<serviceCredentials>
    <clientCertificate>
        <authentication certificateValidationMode="PeerOrChainTrust"/>
    </clientCertificate>
    <serviceCertificate findValue="MyCompany" storeLocation="CurrentUser" storeName="TrustedPeople" x509FindType="FindBySubjectName" />
</serviceCredentials>

这当然会产生我之前列出的错误。我知道它正在找到证书,因为它在错误中显示的细节都是正确的,但我显然遗漏了一些东西。那么我还需要做些什么来让WCF使用我的OpenSSL证书呢?

如果我的问题显而易见,或者我遗漏了一些关键信息,我很抱歉,但我对证书/ SSL场景还不熟悉,而且我已经拥有的很多内容都是我在暗。我非常感谢能够启发我的人!

1 个答案:

答案 0 :(得分:9)

Windows不了解OpenSSL的PEM密钥格式。生成密钥对后,您需要将它们塞入PKCS12(.pfx)格式,以便能够导入整个密钥对。类似的东西:

openssl pkcs12 -export -in yourcert.cer -inkey yourkey.pem -out output.pfx

然后像以前一样使用“证书”管理单元导入.pfx。系统将提示您输入导出期间提供的密钥密码,然后当您查看“您拥有与此证书对应的私钥”的证书时,您应该会看到小钥匙图标。