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权限下会出现很奇怪的错误(即使证书是从文件读取,并且运行帐户有对该文件的访问权限)。

暂无评论

评论

暂无评论。

发表评论

*必填

*必填 (不会被公开)