Web.config C#

时间:2016-12-02 12:27:18

标签: c# wcf restful-url wcf-rest

我需要在rest API客户端中使用Https相互身份验证,因为我们只获取URI,因为我们无法像WCF那样添加客户端证书。 所以我在web .config中添加了键,如下所示:

<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客户端中实现相互身份验证的正确方法吗?

如果没有,有人可以用正确的方法帮助我吗?

1 个答案:

答案 0 :(得分:0)

  

相互身份验证是一种客户端进程的安全功能   必须向服务器证明其身份,服务器必须证明其身份   在发送任何应用程序流量之前,向客户端发送身份   客户端到服务器的连接。

source

有时也称为双向SSL身份验证。

您正在做的事情表明了实现这一目标的正确意图,因为:

  1. 您在创建请求时添加客户端证书
  2. 您使用HTTPS与服务器通信
  3. 我唯一的建议是(如果这是一个严格的要求)通过以下方式强制执行此过程:

    1. 如果未找到客户证书,请确保未提出请求
    2. 提供ServerCertificateValidationCallback方法,您可以在验证服务器证书时添加自定义验证(或强制执行政策)
    3. 改为使用X509Certificate2X509Certificate2Collection课程(see here why