踩坑日志:解决Java在请求某些不受信任的https网站时会报:PKIX path building failed

问题发现:

在进行微信公众号接口开发过程中,进行数据的上传时报出以下异常:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed

大概意思是知道,是因为jdk对不存在信任的网站进行https访问时,就会报出该异常

可是我内网穿透和服务器地址都用的http,怎么还会有这个异常呢,而且我还用HttpCilentUitl进行访问转换过

然后翻了半天源码,发现问题出在这:

    public String menuCreate(String json) throws WxErrorException {
        JsonObject jsonObject = GsonParser.parse(json);
        Menu url = Menu.MENU_CREATE;
        if (jsonObject.get("matchrule") != null) {
            url = Menu.MENU_ADDCONDITIONAL;
        }

微信自带的api封装了一个固定的url格式,再跟进发现:

public static enum Menu implements WxMpApiUrl {
        GET_CURRENT_SELFMENU_INFO("https://api.weixin.qq.com", "/cgi-bin/get_current_selfmenu_info"),
        MENU_TRYMATCH("https://api.weixin.qq.com", "/cgi-bin/menu/trymatch"),
        MENU_GET("https://api.weixin.qq.com", "/cgi-bin/menu/get"),
        MENU_DELCONDITIONAL("https://api.weixin.qq.com", "/cgi-bin/menu/delconditional"),
        MENU_DELETE("https://api.weixin.qq.com", "/cgi-bin/menu/delete"),
        MENU_CREATE("https://api.weixin.qq.com", "/cgi-bin/menu/create"),
        MENU_ADDCONDITIONAL("https://api.weixin.qq.com", "/cgi-bin/menu/addconditional");
}

全部用的https请求,那样的话,只有老办法,将证书添加到jre中了:

1、下载证书:

命名为mpwx:

保存到C:\java-se-8u41-ri\jre\lib\security

2、在该目录下执行命令安装到密钥库:

keytool -import -trustcacerts -alias mpwx -file mpwx.cer -keystore cacerts -storepass changeit 

3、重启服务再次访问,完美解决。不过,今天的头发也掉完了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值