.NET调用SSL加密后的Web服务
2011-10-23 00:46 Echo. 阅读(818) 评论(0) 收藏 举报近期由于跟公司合作的另一家公司服务器升级,对连接,数据传输进行了加密。所以接触到了SSL加密后的web服务,以下列出了调用步骤。
SSL加密的web服务一般要求客户端请求时附加上用户名,密码,以及有效的证书验证。
具体步骤如下
1.打开对方提供的web服务地址,ssl加密后一般是https打头的地址,如果要求安装证书,那么就安装证书。安装后然后导出到本地磁盘.
IE-工具-Internet选项-内容-证书-在特定目录下选择你刚才安装的证书-导出(选择DER 编码二进制 X.509 (.CER)),选择路径。
2.在项目内添加web服务引用。 设置用户名,密码以通过对方服务器身份验证
NetworkCredential networkCredential = new NetworkCredential();
networkCredential.UserName = "username";
networkCredential.Password = "password";
然后讲NetworkCredential 赋值给web服务实例的Credentials属性
3.加载本地证书,
X509Certificate x509Certificate = new X509Certificate(filename);//filename为证书路径
然后讲X509Certificate实例添加到web服务实例的ClientCertificates集合
例如:web服务实例.ClientCertificates.Add(x509Certificate);
完成以上步骤在本地可以访问ssl加密的web服务了。
但是发布到服务器上,远程访问却不正常,提示"基础连接已经关闭:未能为SSL/TLS安全通道建立信任关系".
解决这个其实很简单。初始化web服务前加入一行代码
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
如果发布到服务器,调用时出现"服务器提交了协议冲突:Section=ResponseStatusLine"异常,那么就需要在web.config里配置一个节点
<system.net>
<settings>
<httpWebRequest useUnsafeHeaderParsing="true"/>
</settings>
</system.net>
具体原因在这就不做解释了。完成以上步骤,则可以顺利调用了。
浙公网安备 33010602011771号