天天看點

如何調用帶不可信SSL證書的REST Web服務?

在我們的開發環境中,我們為應用程式配置了自簽名的SSL證書,很顯然,我們不會為開發伺服器花證書的錢。是以,我們就面臨着“如何調用帶不可信SSL證書的REST Web服務”這樣的問題。

我使用Jersey REST用戶端調用REST Web服務,代碼示意如下:

作者chszs,轉載需注明。部落格首頁:http://blog.csdn.net/chszs

TrustManager[] trustAllCerts = new TrustManager[] {   

  new X509TrustManager() {  

      public X509Certificate[] getAcceptedIssuers() {  

          return null;  

      }  

        public void checkClientTrusted(X509Certificate[] certs, String authType) {}  

        public void checkServerTrusted(X509Certificate[] certs, String authType) {}  

    }  

};  

SSLContext context = SSLContext.getInstance("TLS");  

context.init(null, trustAllCerts, new SecureRandom());  

HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());  

ClientConfig config = new DefaultClientConfig();  

config.getProperties().put(  

  HTTPSProperties.PROPERTY_HTTPS_PROPERTIES,   

  new HTTPSProperties(new HostnameVerifier() {  

      @Override  

      public boolean verify(String s, SSLSession sslSession) {  

          return true;  

  },  

  context)  

);  

Client client = Client.create(config);  

client.setFollowRedirects(true);  

WebResource resource = client.resource("https://myserver/myws");  

resource.accept(MediaType.APPLICATION_JSON_TYPE);  

String result = resource.post(String.class);