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