【问题标题】:Understanding the code to make call over SSL了解通过 SSL 进行调用的代码
【发布时间】:2018-09-06 23:42:05
【问题描述】:

我正在浏览应该通过 SSL 进行 api 调用的现有代码。我很难理解,以下代码如何工作?我的意思是这段代码有效,但我无法理解内部工作。特别是两个**标记之间的代码。

这里如何使用证书?我的意思是什么目的证书在这里服务?我已经运行了代码,我看到 GetCertificate 从计算机商店返回一个证书。

 public class Helper
    {
        public static T Post<T>(string resourceUri, object request)
        {
            **ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
            var requestHandler = new WebRequestHandler();
            requestHandler.ServerCertificateValidationCallback = delegate { return true; };
            requestHandler.ClientCertificates.Add(GetCertificate());

            using (var client = new HttpClient(requestHandler))          
            {**
                client.BaseAddress = new Uri(resourceUri);
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));    

                try
                {

                    var responseMessage = client.PostAsJsonAsync(resourceUri, request).Result;
                    if (responseMessage.IsSuccessStatusCode)
                        return responseMessage.Content.ReadAsAsync<T>().Result;
                    else
                        throw new Exception(responseMessage.Content.ReadAsStringAsync().Result);
                }
                catch(Exception ex)
                {
                    // do something
                    return default(T);
                }

            }
        }

【问题讨论】:

  • 客户端证书用于双向 SSL,google 有大量搜索结果

标签: c# ssl asp.net-web-api


【解决方案1】:

这里如何使用证书?

你在之后回复自己:

我看到GetCertificate 从计算机商店返回一个证书。

至于:

我的意思是证书在这里有什么用途?

在 TLS 中,X.509 证书用于身份验证。 TLS 握手的任一端点或两者都可以决定它要对另一方进行身份验证。

因此,每一方都可以向另一方发送其证书,该证书将由另一方通过加密方式进行验证,因为它通常在其信任存储中具有 CA 列表,并且它都会检查证书元数据(有效期, 签名)以及它是由它信任的 CA 之一颁发的事实(或者它正在使用证书白名单)。

这里有一个 HTTP 客户端。它似乎通过 HTTPS 连接的服务器想要对客户端进行身份验证。所以这个HTTP客户端需要给对方发送一个证书。这基本上就是您突出显示的代码的目的。

另一端的ServerCertificateValidationCallback 似乎非常脆弱。它将用于此客户端对服务器进行身份验证。我不知道C#,但看起来它接受任何服务器证书,这可能很糟糕(也许这些只是对底层库所做的额外检查,所以如果它确实检查了元数据和 CA,那么它没关系,如果这条线只是盲目地接受任何证书,那你就麻烦了)。

【讨论】:

    猜你喜欢
    • 2013-02-08
    • 1970-01-01
    • 2011-07-11
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多