SSL:HttpWebRequest的使用以及客户端验证
一般的应用SSL的场合,并不需要客户端提供证书。但一些应用需要双向的SSL验证,服务器需要验证客户端是授权的客户端,客户端需要确认服务器是指定的服务器。
这个代码片断即为该过程的实现。
ServicePointManager.ServerCertificateValidationCallback =
new RemoteCertificateValidationCallback(
CheckRemoteCert /* 在这个方法内检查服务器证书是否有效 */
);
HttpWebRequest request =
HttpWebRequest.Create(HostURL) as HttpWebRequest;
request.KeepAlive = true;
X509Certificate crt = LoadCert(); /* 载入客户端证书 */
request.ClientCertificates.Add(crt);
request.Method = "post";
request.ContentType = "application/x-www-form-urlencoded";
byte[] requestData = Encoding.Default.GetBytes(GetRequestBody());
request.ContentLength = requestData.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(requestData, 0, requestData.Length);
requestStream.Close();
WebResponse response = request.GetResponse();
Stream responseStream = response.GetResponseStream();
byte[] alldata = ReadAllResponseData(responseStream);
这个代码在管理员权限和一些比较高级的权限下运行良好,但是在NetworkService权限下会出现很奇怪的错误(即使证书是从文件读取,并且运行帐户有对该文件的访问权限)。

评论
暂无评论。发表评论