GeXiangDong

精通Java、SQL、Spring的拼写,擅长Linux、Windows的开关机

0%

两个https证书相关问题

javax.net.ssl.SSLHandshakeException

自制ssl证书,报错:javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: Certificate signature algorithm disabled

原因是jre里信任的CA不包含自制CA,可以用keytools加入自制ca:

1
keytool -import -noprompt -trustcacerts -alias YOURALIS -file 自制CA的PEM文件 -keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit

changeit 是默认密码

查看所有信任的CA可以用命令:

1
keytool -list  -keystore %JAVA_HOME%/jre/lib/security/cacerts

java.security.cert.CertPathValidatorException

在高版本jdk,访问某些老网站时,可能出错:java.security.cert.CertPathValidatorException: Usage constraint TLSServer check failed: SHA1 used with certificate: CN=GeoTrust Global CA, O=GeoTrust Inc., C=US. Usage was tls server

这是由于网站使用了SHA1的签名证书,而此版本JDK已经把SHA1证书列为禁止导致,如果要打开支持,可以编辑 %JAVA_HOME%/jre/lib/security/java.security文件,找到jdk.certpath.disabledAlgorithms=这行(后面值内容可能不同):

jdk.certpath.disabledAlgorithms=MD2, MD5, SHA1 jdkCA & usage TLSServer, \
RSA keySize < 1024, DSA keySize < 1024, EC keySize < 224

把里面SHA1部分删除掉改成

jdk.certpath.disabledAlgorithms=MD2, MD5, RSA keySize < 1024, \
DSA keySize < 1024, EC keySize < 224

另外jdk.tls.disabledAlgorithms 也是类似禁止某些tls算法的。