这两天线上一批测试服的环境从JDK7升级到JDK8,上线之后突然不能充值了,后台日志报错如下:
java.lang.RuntimeException: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: Certificates does not conform to algorithm constraints
这个异常字面的意思就是:在进行SSL握手时,所采用的证书算法不符合约束条件,抛了异常。结合堆栈信息,很快定位到代码层面:是我们游戏充值时要向腾讯的服务器发送一个https请求以获取token,然而因为腾讯服务器所采用的ssl证书算法不符合某种约束条件而抛异常了,从而导致充值异常!那到底什么约束条件呢?网上搜索了一下基本都是让你改这个文件:
$JAVA_HOME/jre/lib/security/java.security
把其中的配置项:
#jdk.certpath.disabledAlgorithms=MD2, MD5, RSA keySize < 1024, \
DSA keySize < 1024, EC keySize < 224
改成:
jd[......]