NO IMAGE

本文介紹如何呼叫https雙向認證的webservice。

近期出於資訊保安的考慮,要將先前開發的webservice升級為https雙向認證的,客戶端需要安裝證書才能訪問的webservcie。至於如何釋出https的webservice網上例子很多,這裡不再介紹了。本文介紹的前提是,現在有個現成的https的webservice,有客戶端祕鑰庫、客戶端祕鑰庫口令和伺服器證書,該如何呼叫。

 

            本文使用的客戶端祕鑰是xxx.keystore樣子的,若webservice開發方提供的是p12的客戶端祕鑰可以用下面的命令轉換一下:

keytool -importkeystore -srckeystore D:\client.p12 -srcstoretype PKCS12 -deststoretype JKS -destkeystore D:\keystore.keystore。伺服器證書沒有提供的話,可以用IE訪問webservice地址,再從網站上下載伺服器證書。拿到伺服器證書後,使用keytool生成客戶端信任庫,命令如下:

keytool -import -file D:\server.cer -keystore D:\client.truststore -alias
server

 

好,現在有了客戶端祕鑰庫client.keystore 和客戶端授信庫 client.truststore 呼叫webservice時需要在原來呼叫webservice的程式碼之前加上下面的程式碼:

  System.setProperty(“javax.net.ssl.keyStore”, “D:/client.keystore”);
  System.setProperty(“javax.net.ssl.keyStorePassword”, “passwd”);
  System.setProperty(“javax.net.ssl.trustStore”, “D:/client.truststore”);
  System.setProperty(“javax.net.ssl.trustStorePassword”, “passwd”);

 

如果客戶端用的axis2,此時就可以調通了。如果客戶端用的cxf,光加上面的程式碼還不夠,還需要再加一段程式碼,程式碼詳情見官方sample,具體位置在:

apache-cxf-3.0.1\samples\wsdl_first_https\src\main\java\demo\hw_https\client\ClientNonSpring.java

在呼叫前需要執行setupTLS(xxx)方法。否則會報異常:

org.apache.cxf.interceptor.Fault: Could not send Message.

。。。。。。。。

Caused by: java.net.SocketException: Software caused connection abort: recv failed