2016-12-02 56 views
1

我需要在rest API客户端中使用Https相互认证,因为我们只能获取URI,因此我们无法像WCF那样添加客户端证书。 在我的网页所以我增加了按键的.config如下:web.config中剩余的API客户端配置C#

<appSettings> 
    <add key="URI" value="https://localhost:8080/RestfulAPI/RestfulService.svc/restfulData" /> 
    <add key="CertificateValue" value="certficatename"/> 
    <add key="CertificateLocation" value="LocalMachine"/> 
    <add key="CertificateStoreName" value="My"/> 
    <add key="CertificateFindType" value="FindBySubjectName"/> 
</appSettings> 

,我在我的客户端代码如下使用它:

X509Store store = new X509Store(ConfigurationManager.AppSettings["CertificateStoreName"], ConfigurationManager.AppSettings["CertificateLocation"]); 
      store.Open(OpenFlags.ReadOnly); 
      X509CertificateCollection certificates = store.Certificates.Find(ConfigurationManager.AppSettings["CertificateFindType"], ConfigurationManager.AppSettings["CertificateValue"], true); 
      X509Certificate certificate = certificates[0]; 
      HttpWebRequest request = WebRequest.Create(requestUrl) as HttpWebRequest; 
      request.ClientCertificates.Add(certificate); 

HttpWebResponse response = request.GetResponse() as HttpWebResponse 

这是为了实现相互认证的正确方法REST API客户端?

或者如果没有人可以请帮助我正确的做法?

回答

0

相互认证是一个安全特征,其中一个客户端进程 必须证明其身份的服务器,并且服务器必须证明其 身份到客户端,任何应用程序流量发送过来 客户之前服务器连接。

source

此有时也被称为一个二位三通SSL认证。

你在做什么节目的权利意图为实现这一点,因为:

  1. 您创建请求
  2. 您使用HTTPS与服务器

通信时添加客户端证书我唯一的建议是(如果这是一个严格的要求),通过执​​行这个过程:

  1. 确保请求没有做出如果客户ceritificate没有找到
  2. 提供一个ServerCertificateValidationCallback方法,您可以添加自定义validaton(或的执法策略)验证服务器证书
  3. 使用X509Certificate2X509Certificate2Collection类,而不是当(see here why
+0

嘿,谢谢@AlinG我还需要使证书的详细信息可配置,除了上面提到的那篇文章之外,还有其他的方式吗? – Techie

+0

app.config和查询cert store是一种方式,因为这是一个客户端应用程序,您可能还想添加对从文件加载证书的支持;为此,您可以使用[X509Certificate2 Ctor](https://msdn.microsoft.com/en-us/library/ms148420(v = vs.110).aspx),并可以选择允许它们提供密码以访问证书(这种方式用户不需要安装证书)。 – AlinG