C#在服務端驗證客戶端證書(Certificate)

使用https協議進行通信的時候能夠設置雙向證書認證,客戶端驗證服務端證書的方法前面已經介紹過了,如今說一下在服務端驗證客戶端證書的方案。對象

 

這裏給出的方案比較簡單,只須要在Service端的配置文件中配置好Client端的證書的Thumbprint(一個或者多個),姑且稱之爲證書白名單。當有Client端的Http請求的時候,blog

只須要使用HttpRequestMessage的擴展方法GetClientCertificate()方法獲取該請求所攜帶的證書,並驗證該證書的Thumbprint是否包含在配置文件的白名單中,若是不包含在白名單中,it

在攔截該請求,並報401(未受權)錯誤便可;不然,繼續執行該請求。io

 

注意:class

GetClientCertificate()方法是HttpRequestmessage對象的擴展方法,該方法定義在System.Net.Http命名空間下的HttpRequestMessageExtensions類中。該方法返回的是一個X509Certificate對象。cli

 

客戶端攜帶證書發出請求:擴展

           
          var clientCertificate = ...;//獲取本地證書對象
          using (WebRequestHandler handler = new WebRequestHandler())
                {
                    handler.ClientCertificates.Add(clientCertificate);
                    using (HttpClient httpClient = new HttpClient(handler))
                    {
                        var request = new HttpRequestMessage(method: httpMethod, requestUri: requestUri);
                  
                        if (requestContent != null)
                        {
                            request.Content = requestContent;
                        }

                        return await httpClient.SendAsync(request);
                    }          }
相關文章
相關標籤/搜索