解决方法
When you browse to a HTTPS site,you probably get a dialog window asking you if you want to trust the certificate provided by the webserver. So the responsibility of accepting the certificate is handled by the user. Let’s get back to the webservice scenario,if you want to invoke a webservice located on a webserver which uses SSL and HTTPS there is a problem. When you make the call from code,there is no dialog window popping up,and asking if you trust the certificate (luckily because this would be pretty ugly in server-side scenarios); probably you’ll get following exception:
An unhandled exception of type
System.Net.WebException
occurred in System.dll
Additional information: The underlying
connection was closed: Could not
establish trust relationship with
remote server.
但是有一个解决方案
你可以解决这个问题
代码创建自己的
CertificatePolicy类(其中
实现ICertificatePolicy
接口).在这个班上你会的
必须自己写
CheckValidationResult函数
必须像你一样返回真或假
会在对话框中按是或否
窗口.为了发展目的,我已经
创建了以下类
接受所有证书,所以你不会
得到令人讨厌的WebException:public class TrustAllCertificatePolicy : System.Net.ICertificatePolicy { public TrustAllCertificatePolicy() { } public bool CheckValidationResult(ServicePoint sp,X509Certificate cert,WebRequest req,int problem) { return true; } }As you can see the
CheckValidationResult
function always
returns true,so all certificates will
be trusted. If you want to make this
class a little bit more secure,you
can add additional checks using the
X509Certificate
parameter for example.
To use thisCertificatePolicy
,you’ll
have to tell theServicePointManager
to use it:System.Net.ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy();This must be done (one time during the application life cycle) before making the call to your webservice.