[JAVA] 禁用HTTPS认证(Disabling Certification validation in HTTPS)

来源:互联网 发布:软件开发工作量统计表 编辑:程序博客网 时间:2024/06/06 18:49
問題:
       有一個WCF部署在功能,現要求在Java和C#下分別(http,https)調用wcf 。但是認證是私人簽發的,所以在該兩個平臺上均無法得到確認(validate)。問題就是如何在Java和C#平臺上禁用對於HTTPS的認證確認功能,當然這只能做為測試來用,正確的做法是應該是要安裝好認證的。
       注意這裡的要求有點怪:是“禁用”也就是讓原有的認證確認功能不工作。但是實際上這個要求的實現是通過一個Hook:讓所有的認證確認都通過。
C#:
網上一Google就Google到了,沒難度:
直接在post前加入下述Hook,讓他永遠返回true
System.Net.ServicePointManager.ServerCertificateValidationCallbac = delegate { return true; };
Java:
本來以為Java會和C#一樣簡單,最差也不至於很難。事實也證明的確實簡單,但是就是這個簡單的答案,居然Google了一整天,主要是Keyword的使用上犯了一些錯誤。總算找到了。方法就是在程式的最開始加上如下這句話:
System.setProperty("org.apache.axis.components.net.SecureSocketFactory","org.apache.axis.components.net.SunFakeTrustSocketFactory"); 
作用也很簡單,騙Axis信任所有的認證。

補充說明:
      WCF中web.config需要配置 https訪問通道,見下述兩行,紅色差異部份。

      <endpoint address="" binding="basicHttpBinding"
bindingNamespace="
http://hao123.com/test"
contract="TEST_Service.ITestService"/>

      <endpoint address="" binding="basicHttpsBinding" bindingNamespace="http://hao123.com/test"
contract="TEST_Service.ITestService"/>

0 0