解决https证书验证不通过的问题
2017-03-09 09:00
363 查看
1、报错信息
原因:在调用api.weibo.com的时候,我们使用的是https的方式,正常情况下应该是使用api.weibo.com的证书,但由于某些原因,我们只能使用自己的证书,导致在验证证书的时候,就报了这个错误。
解决的办法:忽略服务端和客户端的证书校验即可。java 提供的相关的类。
2、具体实现方式
通过重写TrustManager的checkClientTrusted(检查客户端证书信任)和checkServerTrusted(检查服务端证书验证)。
以及HostnameVerifier的verify(校验)方法即可取消对证书的所有验证。
调用方式:
影响的范围:将会影响整个tomcat里面对证书的验证。即通过tomcat里面的其他项目虽然没有执行这一段代码但是也同样会忽略证书的验证。
影响的时间:执行这段代码之后的所有时间都生效。
致谢:感谢您的耐心阅读!
java.security.cert.CertificateException: No name matching api.weibo.com found; nested exception is javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching api.weibo.com found
原因:在调用api.weibo.com的时候,我们使用的是https的方式,正常情况下应该是使用api.weibo.com的证书,但由于某些原因,我们只能使用自己的证书,导致在验证证书的时候,就报了这个错误。
解决的办法:忽略服务端和客户端的证书校验即可。java 提供的相关的类。
2、具体实现方式
通过重写TrustManager的checkClientTrusted(检查客户端证书信任)和checkServerTrusted(检查服务端证书验证)。
以及HostnameVerifier的verify(校验)方法即可取消对证书的所有验证。
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.net.ssl.*; import java.io.IOException; import java.net.URL; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; public final class DisableSSLCertificateCheckUtil { private static final Logger LOGGER = LoggerFactory.getLogger(DisableSSLCertificateCheckUtil.class); /** * Prevent instantiation of utility class. */ private DisableSSLCertificateCheckUtil() { } /** * Disable trust checks for SSL connections. */ public static void disableChecks() { try { new URL("https://0.0.0.0/").getContent(); } catch (IOException e) { // This invocation will always fail, but it will register the // default SSL provider to the URL class. } try { SSLContext sslc; sslc = SSLContext.getInstance("TLS"); TrustManager[] trustManagerArray = {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 new X509Certificate[0]; } }}; sslc.init(null, trustManagerArray, null); HttpsURLConnection.setDefaultSSLSocketFactory(sslc.getSocketFactory()); HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() { @Override public boolean verify(String s, SSLSession sslSession) { return true; } }); } catch (Exception e) { LOGGER.error("error msg:{}", e); throw new IllegalArgumentException("证书校验异常!"); } } }
调用方式:
DisableSSLCertificateCheckUtil.disableChecks();
影响的范围:将会影响整个tomcat里面对证书的验证。即通过tomcat里面的其他项目虽然没有执行这一段代码但是也同样会忽略证书的验证。
影响的时间:执行这段代码之后的所有时间都生效。
致谢:感谢您的耐心阅读!
相关文章推荐
- 解决 https 证书验证不通过的问题
- 三步解决fiddler升级后https无法通过证书验证问题
- 三步解决fiddler升级后https无法通过证书验证问题
- 三步解决fiddler升级后https无法通过证书验证问题
- 解决https需要验证问题
- 通过Page_ClientValidate解决验证控件和confirm冲突的问题
- 通过machineKey配置解决asp.net验证视图状态MAC失败的问题
- 解决linux下https访问证书问题
- 微信支付证书问题C#使用Https访问加载SSL证书本地调试正常服务器IIS内部错误解决方法
- 解决https证书问题
- 密钥发行中心(KDC)找不到相应的证书用于智能卡登录,或者无法验证 KDC 证书。如果不解决该问题,智能卡登录可能不会正常工作。若要更正该问题,请使用 certutil.exe 验证现有的 KDC 证书或注册新的 KDC 证书。
- HTTPS访问站点,出现证书问题解决(转载)
- Communicator使用TLS方式登录提示证书验证失败问题的解决
- 解决IIS配置HTTPS证书完成证书后刷新后证书消失问题
- BlueCoat SG设备对非标准HTTPS应用访问提示不可信任发行者证书问题解决
- AFNetworking允许不通过证书验证访问https(AFNetworking+SSL)
- HTTPS访问站点,出现证书问题解决
- Error validating server certificate for 'https://xxxxxxx':443... Mac os svn客户端证书验证缓存 解决
- 解决GoAgent打开https网站SSL证书错误 (安全证书不受信任)问题
- windows2008 使用nginx 反向代理实现负载均衡解决HTTPS 证书问题