java调用https服务的ip地址报错证书问题解决:SSLPeerUnverifiedException: Certificate fo

问题描述:

java项目调用微信api的域名接口正常: String wxAccessTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?"; 因项目要求采用ip访问外部服务,所以ping api.weixin.qq.com 得到域名对应的ip为101.91.37.13, 所以替换java调用api接口为:"https://101.91.37.13/cgi-bin/token?";

此时项目代码调用api接口为:"https://101.91.37.13/cgi-bin/token?",发出http请求后报错,内容如下:

javax.net.ssl.SSLPeerUnverifiedException: Certificate for <101.91.37.13> doesn't match any of the subject alternative names: [mp.weixin.qq.com, *.api.weixin.qq.com, *.mp.weixin.qq.com, *.open.weixin.qq.com, *.wechat.com, *.weixin.qq.com, mp.weixinbridge.com, rd.wechatapp.com, servicewechat.com]

解决办法

1. 修改请求的域名/ip,使证书可以覆盖到。

2. 设置证书的SAN,覆盖到请求的域名/ip。

3. 从代码上,要从调用HttpClient的代码入手,单独处理下信任所有证书,关闭主机名校验,就能通过验证了。 代码:

//信任所有证书,关闭主机名校验
        SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
                SSLContexts.custom().loadTrustMaterial(null,new TrustSelfSignedStrategy()).build(),
                NoopHostnameVerifier.INSTANCE);
        // 创建Httpclient对象
        CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).build();
//        CloseableHttpClient httpclient = HttpClients.createDefault();

--------------------------------------

参考解决:用HttpClient发送HTTPS请求报SSLException: Certificate for <域名> doesn‘t match any of the subject alternative_飞奔的大土豆的博客-CSDN博客

参考思路:httpClient,Certificate for ip/域名 doesn't match any of the subject altinative names: []问题处理_马路上开飞机的博客-CSDN博客

javax.net.ssl.SSLPeerUnverifiedException: Certificate for <IP> doesn't match common name of t_shenqs0403的博客-CSDN博客

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值