Java SSL - CertificateException: No name matching

本文详细解释了使用Java连接SSL网站时出现的“Caused by: java.security.cert.CertificateException: No name matching...”错误原因,并提供了两种解决方案:一是通过更改客户端SSL配置信任所有主机名;二是服务端重新制作证书,确保证书中的subject CN名称与实际使用的主机名一致。

用java去连接SSL网站时,有时候出现:

Caused by: java.security.cert.CertificateException: No name matching ...

这是因为虽然server的certificate被trust了,但是host name verify验证失败,因为你connect的service的hostname和证书中的subject CN name不一致,所以导致了这个问题。


解决办法有两个:

1 客户端可以更改SSL配置去信任所有的hostname。

TrustManager[] trustAllCerts = new TrustManager[]{
     new X509TrustManager() {
         public java.security.cert.X509Certificate[] getAcceptedIssuers() {
             return null;
         }
         public void checkClientTrusted(X509Certificate[] certs, String authType) {
         }
         public void checkServerTrusted(X509Certificate[] certs, String authType) {
         }
     }
 };

 SSLContext sc = SSLContext.getInstance("SSL");
 sc.init(null, trustAllCerts, new java.security.SecureRandom());
 HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

 HostnameVerifier allHostsValid = new HostnameVerifier() {
     public boolean verify(String hostname, SSLSession session) {
         return true;
     }
 };


 // set the  allTrusting verifier
 HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);


2 服务端重新制作证书,将证书中的subject CN name signed成自己真正的被客户端连接时使用的hostname.


原文:http://blog.youkuaiyun.com/hongchangfirst/article/details/78202635

作者:hongchangfirst

hongchangfirst的主页:http://blog.youkuaiyun.com/hongchangfirst



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值