javax.net.ssl.SSLException: hostname in certificate didn't match:

本文介绍了在Android中遇到的HTTPS链接问题,特别是当主机名与证书中的名称不匹配时出现的SSL异常。提供了针对不同HTTP客户端的具体解决方案,包括org.apache.http和原生URLConnect。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

每个协议有自己的一套SSL东西,Android 链接https经常会抛出如下错误

 javax.net.ssl.SSLException: hostname in certificate didn't match: <test.rigbee.cn> != <rigbee.cn> OR <rigbee.cn> OR <www.rigbee.cn>
 	at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:185)
 	at org.apache.http.conn.ssl.BrowserCompatHostnameVerifier.verify(BrowserCompatHostnameVerifier.java:54)
 	at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:114)
 	at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:95)
 	at org.apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.java:381)
 	at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:165)
 	at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
 	at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
 	at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)

如果使用org.apache.http,修改主机名验证解决问题

import org.apache.http.conn.ssl.AllowAllHostnameVerifier;  
import org.apache.http.conn.ssl.SSLSocketFactory;  
SSLSocketFactory.getSocketFactory().setHostnameVerifier(new AllowAllHostnameVerifier()); 

如果使用原生URLConnect的话添加如下设置

try {         
    SSLContext sc = SSLContext.getInstance("TLS");  
    sc.init(null, new TrustManager[] { new X509TrustManager() {  
        @Override  
        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {  
        }  
  
  
        @Override  
        public void checkServerTrusted(X509Certificate[] chain, String authType)  
  
  
        throws CertificateException {  
        }  
  
  
        @Override  
        public X509Certificate[] getAcceptedIssuers() {  
            return null;  
        }  
    } }, new SecureRandom());  
    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());  
    HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {  
        @Override  
        public boolean verify(String arg0, SSLSession arg1) {  
            return true;  
        }  
    });  
} catch (Exception e) {  
    e.printStackTrace();  
}  


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值