首页 / JAVA / java.security.cert.CertificateException: No subject alternative DNS name matching XXX found解决方案
java.security.cert.CertificateException: No subject alternative DNS name matching XXX found解决方案
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java.security.cert.CertificateException: No subject alternative DNS name matching XXX found解决方案,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3560字,纯文字阅读大概需要6分钟。
内容图文
![java.security.cert.CertificateException: No subject alternative DNS name matching XXX found解决方案](/upload/InfoBanner/zyjiaocheng/634/53c831ff06dc4de593bd478f9c4be9a0.jpg)
由于第三方服务商更新服务器证书,导致向其推送数据出现SSL证书认证失败。
网上搜了一堆,都无法生效,最终找到了一个完美解决方案:
在代码层跳出SSL验证
1、观察异常日志信息如下:
2、新增跳过证书的类,TrustAllTrustManager.java,代码如下:
public class TrustAllTrustManager implements javax.net.ssl.TrustManager, javax.net.ssl.X509TrustManager {
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
@Override
public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType)
throws java.security.cert.CertificateException {
return;
}
@Override
public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType)
throws java.security.cert.CertificateException {
return;
}
}
3、在自己的发送controller中添加如下代码:
// 直接通过主机认证
HostnameVerifier hv = new HostnameVerifier() {
@Override
public boolean verify(String urlHostName, SSLSession session) {
return true;
}
};
// 配置认证管理器
javax.net.ssl.TrustManager[] trustAllCerts = {new TrustAllTrustManager()};
SSLContext sc = SSLContext.getInstance("SSL");
SSLSessionContext sslsc = sc.getServerSessionContext();
sslsc.setSessionTimeout(0);
sc.init(null, trustAllCerts, null);
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
// 激活主机认证
HttpsURLConnection.setDefaultHostnameVerifier(hv);
URL url = new URL(url);
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
4:比如我的调用第三方接口类如下:
//XXX接口(出库备料)
@RequestMapping("/PostMidStoreOut")
@ResponseBody
public Map<String, Object> PostMidStoreOut(String sb){
Map<String, Object> map = new HashMap<String, Object>();
try {
// 直接通过主机认证
HostnameVerifier hv = new HostnameVerifier() {
@Override
public boolean verify(String urlHostName, SSLSession session) {
return true;
}
};
TrustManager[] trustAllCerts = {new TrustAllTrustManager()};
SSLContext sc = SSLContext.getInstance("SSL");
SSLSessionContext sslsc = sc.getServerSessionContext();
sslsc.setSessionTimeout(0);
sc.init(null, trustAllCerts, null);
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
// 地址
URL url = new URL(config.getWms()+"/XXXX/XXXX");
// 调用的方法
String soapActionString = "PostMidStoreOut";
// 激活主机认证
HttpsURLConnection.setDefaultHostnameVerifier(hv);
// 打开链接
HttpURLConnection con = (HttpURLConnection) url.openConnection();
String xmlStr = sb.toString();
con.setRequestMethod("POST");
con.setRequestProperty("content-type", "text/xml; charset=utf-8");
con.setRequestProperty("Content-Length", String.valueOf(xmlStr.getBytes().length));
con.setRequestProperty("soapActionString", soapActionString);
// post请求需要设置
con.setDoOutput(true);
con.setDoInput(true);
// 对请求body 往里写xml 设置请求参数
OutputStream ops = con.getOutputStream();
ops.write(xmlStr.getBytes());
ops.flush();
ops.close();
// 设置响应回来的信息
if (con.getResponseCode() == 200) {
InputStream ips = con.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int length = 0;
while ((length = ips.read(buf)) != -1) {
baos.write(buf, 0, length);
baos.flush();
}
byte[] responsData = baos.toByteArray();
baos.close();
// 处理写响应信息
String responsMess = new String(responsData, "utf-8");
map.put("result", true);
map.put("status", 0);
map.put("responsMess", responsMess);
} else {
map.put("status", 1);
map.put("result", false);
map.put("Msg", "传输数据错误");
map.put("ResponseMessage", con.getResponseMessage());
}
} catch (Exception e) {
e.printStackTrace();
map.put("status", 1);
map.put("Msg", "传输数据错误");
map.put("result", false);
}
return map;
}
内容总结
以上是互联网集市为您收集整理的java.security.cert.CertificateException: No subject alternative DNS name matching XXX found解决方案全部内容,希望文章能够帮你解决java.security.cert.CertificateException: No subject alternative DNS name matching XXX found解决方案所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。