【问题标题】:Rest API Client configuration in web.config C#在 web.config C# 中配置 Rest API 客户端
【发布时间】:2017-04-17 08:48:13
【问题描述】:

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

或者如果没有,请有人帮助我正确的方法?

【问题讨论】:

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


    【解决方案1】:

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

    (source)

    这有时也称为 2-way SSL 身份验证。

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

    1. 您在创建请求时添加客户端证书
    2. 您使用 HTTPS 与服务器通信

    我唯一的建议是(如果这是一个严格的要求)通过以下方式执行此过程:

    1. 确保在未找到客户端证书时不发出请求
    2. 提供ServerCertificateValidationCallback 方法,您可以在其中添加自定义验证(或执行策略)验证服务器证书时
    3. 使用 X509Certificate2X509Certificate2Collection 类代替 (see here why)

    【讨论】:

    • 嘿,谢谢@AlinG 我还需要配置证书详细信息,除了我在上面的帖子中提到的方法之外,还有其他方法吗?
    • app.config 和查询证书存储是一种方法,因为这是一个客户端应用程序,您可能还希望添加对从文件加载证书的支持;为此,您可以使用X509Certificate2 Ctor 并可选择允许他们提供密码来访问证书(这样用户就不需要安装证书)。
    猜你喜欢
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    • 2017-03-31
    • 2010-10-13
    • 2017-08-11
    • 1970-01-01
    相关资源
    最近更新 更多