使用https協議進行通訊的時候可以設置雙向證書認證,客戶端驗證服務端證書的方法前面已經介紹過了,現在說一下在服務端驗證客戶端證書的方案。
這里給出的方案比較簡單,只需要在Service端的配置文件中配置好Client端的證書的Thumbprint(一個或者多個),姑且稱之為證書白名單。當有Client端的Http請求的時候,
只需要使用HttpRequestMessage的擴展方法GetClientCertificate()方法獲取該請求所攜帶的證書,並驗證該證書的Thumbprint是否包含在配置文件的白名單中,如果不包含在白名單中,
在攔截該請求,並報401(未授權)錯誤即可;否則,繼續執行該請求。
注意:
GetClientCertificate()方法是HttpRequestmessage對象的擴展方法,該方法定義在System.Net.Http命名空間下的HttpRequestMessageExtensions類中。該方法返回的是一個X509Certificate對象。
客戶端攜帶證書發出請求:
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); }
}