WCF 服务证书认证

Posted

技术标签:

【中文标题】WCF 服务证书认证【英文标题】:WCF service certificate authentication 【发布时间】:2014-05-11 23:07:04 【问题描述】:

当 wcf 服务将使用证书时,将使用 wcf 服务的客户端如何将证书发送到 wcf 服务。这个想法我不清楚,当 wcf 客户端第一次调用 wcf 服务时,客户端将如何发送服务证书?请讨论人们如何使用 wcf 和证书。

还简要介绍一下我们需要执行哪些步骤才能将证书附加到我们的 wcf 服务?

wcf 客户端在调用时如何将证书发送给 wcf 服务?

我们是否需要在 wcf 客户端为证书配置任何东西?

一个人告诉我

在wcf中使用证书认证时,那么在服务端和客户端,都需要安装服务证书和客户端证书。然后在客户端,客户端将使用服务公钥加密消息并发送给服务,然后服务将使用服务私钥解密消息。而在服务端,它会使用客户端公钥对消息进行加密并发送给客户端。然后客户端将使用客户端私钥来解密消息。

如果这是证书认证的限制,我们需要在两端安装证书,那么我们可以在非常有限的情况下使用证书认证。当我们无法控制将使用该服务的客户端时,请告诉我如何使用证书身份验证。 当客户未知时,他们如何将证书发送到我们的服务。

实际上,我想知道当人们无法控制将使用他们服务的客户时,他们是如何在现实生活中实现证书身份验证的。谢谢

【问题讨论】:

您是在谈论客户端证书身份验证,如果没有客户端和主机共同的证书,主机服务将不允许访问? 是客户证书。 【参考方案1】:

好的,您正在寻找潜在客户的客户证书身份验证,其中始终包括 SSL。

我有几个链接供您查看:

http://msdn.microsoft.com/en-us/library/ms731074(v=vs.110).aspx 是来自 MS 的官方版本,它有很好的信息,但不一定是关于让它工作的很好的说明。

http://architecturebyashwani.blogspot.de/2010/01/wcf-client-authentication-using-x509.html ...在我看来,这是一个更好的来源,因为它将引导您完成设置测试所需的证书(自签名)的过程。

就控制客户端计算机的颁发和证书而言,这可能是容易的还是困难的,具体取决于所涉及的客户端设备的数量和它们所在的位置。

如果您谈论的是网络内服务器到服务器通信的内部实现,或者可能是几台 PC 连接到主机,那并不太难。简而言之,您将 .PFX 文件(证书和私钥)复制到客户端和主机,并将它们设置在证书存储区(例如 LocalComputer\Trusted)。然后,您将客户端和主机 WCF 软件设置为 a) 访问证书和 b) 使主机拒绝未经身份验证的用户的访问。

但是,如果您要为一千名携带 iPhone、android 和笔记本电脑四处走动的人颁发和管理证书,这将是一个更难控制的提议。

这里有一个关于设置内部证书颁发机构的链接: http://technet.microsoft.com/en-us/library/ff849263(v=ws.10).aspx

添加:此 DOS 脚本将创建客户端身份验证证书,将它们打包为 PFX 并将它们安装到主机上的证书存储中。

在主机端你这样做:

 rem Comment -- creates client authentication cert, puts it in the currentuser\root authority and signs it based on the other certificate
 makecert.exe  -n cn=ClientAuthCert ClientAuthCert.cer -is root -sky exchange -pe -sv ClientAuthCert.pvk -eku 1.3.6.1.5.5.7.3.2

 rem Comment -- make the pfx file that will allow you to copy certs around with private keys
 pvk2pfx -pvk ClientAuthCert.pvk -spc ClientAuthCert.cer -pfx ClientAuthCert.pfx -f

 rem Comment -- installs the certificate on the host in the localmachine / trusted people store
 certmgr.exe -add ClientAuthCert.cer  -c -s -r LocalMachine TrustedPeople

在客户端,您执行此操作(将 .CER 和 .PFX 文件复制到客户端计算机之后):

 rem comment -- these lines install the certificates in the stores on the client device
 certmgr.exe -add ClientAuthCert.cer  -c -s -r LocalMachine TrustedPeople
 Certmgr.exe -add ClientAuthCert.pfx  -c -s -r CurrentUser My  

【讨论】:

首先感谢您的回答。我是 wcf 领域的新手。我确实知道如何生成证书以及如何将证书设置到客户端电脑。当我无法控制客户端电脑时我会做什么。那我如何在他的电脑上设置证书。 我可以阻止客户端为我的服务生成代理吗?另一方面,我会将生成的代理相关类和文件发送给客户端,并且将有生成证书的内置逻辑,并在客户端拨打电话时传递给 wcf 服务.....是否可能...... .如果是,那么你能给我指示吗?谢谢 当我们通过 makecert.exe 创建证书时,证书将存储在我们本地电脑中的位置。告诉我文件夹位置。谢谢 有两种证书文件。一个是证书,另一个是 pfx。你能告诉我cert和pfx文件有什么区别吗?什么时候使用? 对不起,Thomas,我想你和我在两个不同的时区。我将回答您的几个问题,但我认为您需要遵循我发送给您的一个或多个网站的说明。有几种不同类型的证书文件:有一个 .CER 文件是公钥,有一个 .PVK 文件是私钥文件,然后有一个文件将它们组合在一起,以便将它们从一个地方一起传输到另一个 - 那是 PFX 文件。您需要阅读有关 MakeCert.exe、MMC 证书管理器和其他类似内容的信息才能使其正常工作。

以上是关于WCF 服务证书认证的主要内容,如果未能解决你的问题,请参考以下文章

您可以在 azure acs 中同时拥有客户端证书安全性和服务身份认证吗

签署认证请求

使用SSLSocket实现双向认证(keytool证书创建双向认证证书(这里有根证书)的详细步骤以及踩雷)

客户端证书认证请求实操

https双向认证是啥?

国密证书双向认证客户端发送哪个