我已经使用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场景还不熟悉,而且我已经拥有的很多内容都是我在暗。我非常感谢能够启发我的人!
答案 0 :(得分:9)
Windows不了解OpenSSL的PEM密钥格式。生成密钥对后,您需要将它们塞入PKCS12(.pfx)格式,以便能够导入整个密钥对。类似的东西:
openssl pkcs12 -export -in yourcert.cer -inkey yourkey.pem -out output.pfx
然后像以前一样使用“证书”管理单元导入.pfx。系统将提示您输入导出期间提供的密钥密码,然后当您查看“您拥有与此证书对应的私钥”的证书时,您应该会看到小钥匙图标。