使用IP调用https的webservice问题

www.acgist.com/article/393.html

使用IP调用https的webservice问题

    错误信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names present
     at sun.security.ssl.Alerts.getSSLException(Alerts.java: 192 )
     at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java: 1949 )
     at sun.security.ssl.Handshaker.fatalSE(Handshaker.java: 302 )
     at sun.security.ssl.Handshaker.fatalSE(Handshaker.java: 296 )
     at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java: 1509 )
     at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java: 216 )
     at sun.security.ssl.Handshaker.processLoop(Handshaker.java: 979 )
     at sun.security.ssl.Handshaker.process_record(Handshaker.java: 914 )
     at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java: 1062 )
     at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java: 1375 )
     at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java: 1403 )
     at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java: 1387 )
     at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java: 559 )
     at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java: 185 )
     at sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java: 1283 )
     at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java: 1258 )
     at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java: 250 )
     at com.sun.xml.internal.ws.transport.http.client.HttpClientTransport.getOutput(HttpClientTransport.java: 104 )
     ...  39  more
Caused by: java.security.cert.CertificateException: No subject alternative names present
     at sun.security.util.HostnameChecker.matchIP(HostnameChecker.java: 144 )
     at sun.security.util.HostnameChecker.match(HostnameChecker.java: 93 )
     at sun.security.ssl.X509TrustManagerImpl.checkIdentity(X509TrustManagerImpl.java: 455 )
     at sun.security.ssl.X509TrustManagerImpl.checkIdentity(X509TrustManagerImpl.java: 436 )
     at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java: 200 )
     at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java: 124 )
     at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java: 1491 )
     ...  52  more

http请求错误:

1
2
3
4
5
javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names matching IP address xxx.xxx.xxx.xxx found
     at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java: 174 )
     at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java: 1747 )
     at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java: 241 )
     at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java: 235 )

    后来发现不能使用IP调用https的webservice接口,解决办法:

        1.使用域名访问

        2.忽略SSL证书,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package  com.sojson.www.zhanzhang.utils;
 
import  java.security.cert.CertificateException;
import  java.security.cert.X509Certificate;
  
import  javax.net.ssl.HostnameVerifier;
import  javax.net.ssl.HttpsURLConnection;
import  javax.net.ssl.SSLContext;
import  javax.net.ssl.SSLSession;
import  javax.net.ssl.TrustManager;
import  javax.net.ssl.X509TrustManager;
  
public  class  SslUtils {
  
     private  static  void  trustAllHttpsCertificates()  throws  Exception {
         TrustManager[] trustAllCerts =  new  TrustManager[ 1 ];
         TrustManager tm =  new  miTM();
         trustAllCerts[ 0 ] = tm;
         SSLContext sc = SSLContext.getInstance( "SSL" );
         sc.init( null , trustAllCerts,  null );
         HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
     }
  
     static  class  miTM  implements  TrustManager,X509TrustManager {
         public  X509Certificate[] getAcceptedIssuers() {
             return  null ;
         }
  
         public  boolean  isServerTrusted(X509Certificate[] certs) {
             return  true ;
         }
  
         public  boolean  isClientTrusted(X509Certificate[] certs) {
             return  true ;
         }
  
         public  void  checkServerTrusted(X509Certificate[] certs, String authType)
                 throws  CertificateException {
             return ;
         }
  
         public  void  checkClientTrusted(X509Certificate[] certs, String authType)
                 throws  CertificateException {
             return ;
         }
     }
      
     /**
      * 忽略HTTPS请求的SSL证书,必须在openConnection之前调用
      * @throws Exception
      */
     public  static  void  ignoreSsl()  throws  Exception{
         HostnameVerifier hv =  new  HostnameVerifier() {
             public  boolean  verify(String urlHostName, SSLSession session) {
                 return  true ;
             }
         };
         trustAllHttpsCertificates();
         HttpsURLConnection.setDefaultHostnameVerifier(hv);
     }
}

    参考:http://www.sojson.com/blog/195.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值