我已经创建了一个应该在我的域外使用的WCF服务,因此我决定将WSHttpBinding与证书身份验证和消息安全性一起使用。
我使用makecert创建了一个名为“Test And Dev Root Authority”的自签名证书,并使用相同的工具签署了其他两个证书
makecert -pe -n "CN=WcfServiceServer" -ss my -sr LocalMachine -a sha1 -sky exchange -eku 1.3.6.1.5.5.7.3.1 -in "Test And Dev Root Authority" -is my -ir LocalMachine -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 WcfServiceServer.cer
makecert -pe -n "CN=WcfServiceClient" -ss my -sr LocalMachine -a sha1 -sky exchange -eku 1.3.6.1.5.5.7.3.1 -in "Test And Dev Root Authority" -is my -ir LocalMachine -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 WcfServiceClient.cer
在我的电脑上使用mmc我将3个证书添加到本地计算机帐户上的受信任人和受信任的根证书颁发机构。
我在IE中调用了wcf服务并且显示正确。 我在另一台计算机上创建了一个测试应用程序,并将该服务添加为对它的引用。我使用密钥导出 WcfServiceClient ,并将其导入第二台计算机上的当前帐户,并将其添加到上述可信文件夹中。
客户端应用中wcf部分的app.config部分如下所示:
<client>
<endpoint address="http://otherpc/WcfTest/Service.svc"
binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IServices"
contract="WcfTest.IServices" name="WSHttpBinding_IServices" behaviorConfiguration="CustomBehavior">
<identity>
<dns value="WcfServiceServer" />
</identity>
</endpoint>
</client>
<behaviors>
<endpointBehaviors>
<behavior name="CustomBehavior">
<clientCredentials>
<clientCertificate findValue="WcfServiceClient" x509FindType="FindBySubjectName" storeLocation="CurrentUser" storeName="My" />
<serviceCertificate>
<authentication certificateValidationMode="PeerTrust"/>
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
当我想在第二台计算机上测试应用程序时,它失败了,因为它说证书 WcfServiceServer 不在受信任的人员文件夹中。我没想到那个错误。我发现,为了从测试应用程序中使用服务,唯一的解决方案是导出WcfServiceServer证书并将其安装在第二台计算机上,并将其添加到受信任人区域中的当前用户帐户。
是否可以避免向客户端提供WCFServiceServer证书,仅提供WcfServiceClient证书并使应用程序正确访问服务?
我的第二个问题是:在生产环境中,我应该购买SSL证书,然后生成另外两个证书(一个用于服务,一个用于客户端),如上所述,并将它们传递给客户端/服务器端,执行上述步骤?
提前谢谢你。我是WCF的总菜鸟