原来的程序是用jdk7的包开发的,服务器上执行:grep "DigiCert Global Root" /etc/pki/tls/certs/ca-bundle.crt 后,系统返回:
# DigiCert Global Root CA
# DigiCert Global Root G2
# DigiCert Global Root G3 说明服务器系统已内置了G1和G2根证书。 在hosts增加43.142.224.50 api.mch.weixin.qq.com后, 出现错误:
Error connecting to https://api.mch.weixin.qq.com/pay/unifiedorder: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
请求参数:
<xml><body>费用支付</body><product_id>gas_pay</product_id><spbill_create_ip>117.173.89.89</spbill_create_ip><notify_url>http://www.****.com/hlatmsa/saas_atm_sm_pay_notify40.do</notify_url><appid>wx************</appid><nonce_str>t1lyfdpe1pmh2jiwls6mhf3f1i44wvy6</nonce_str><out_trade_no>HL202407041339120845</out_trade_no><device_info>device7777</device_info><trade_type>NATIVE</trade_type><sign>******************</sign><time_expire>20240704134112</time_expire><mch_id>*********</mch_id><sub_appid>wx***********</sub_appid><attach>code2222</attach><total_fee>1</total_fee><sub_mch_id>*********</sub_mch_id></xml> , 目前系统还是用的JDk7。 请问这个是什么原因呢?试了几个接口,都是类似的错误?参数中把部分敏感参数用*代替, 需要把原来的程序升级到JDK8支持的程序吗?
你好,可能是业务代码指定使用了非G2的跟证书,请参考修正指引删除指定证书的代码https://developers.weixin.qq.com/community/develop/article/doc/0002284c6948c066ad919a2bc67813