如何从Java密钥库中的证书链中仅删除一个证书

RTS*_*lio 6 java ssl https keystore ssl-certificate

我有一个Tomcat服务器,其中包含存储在Java密钥库中的HTTPS证书链.该链包括自签名根CA证书.虽然TLS规范显然没有问题,但是一些验证服务警告它,并且最好不要这样做.

如何编辑密钥库以仅删除自签名的根CA证书,但保留链的其余部分和私钥完整?

RTS*_*lio 9

首先,将密钥库从JKS转换为PKCS12(此命令和其他命令将需要密码输入):

keytool -importkeystore -srckeystore old.jks -destkeystore old.p12 -deststoretype pkcs12
Run Code Online (Sandbox Code Playgroud)

接下来,使用PKCS12文件中的密钥和证书导出PEM文件:

openssl pkcs12 -in old.p12 -out pemfile.pem -nodes
Run Code Online (Sandbox Code Playgroud)

现在只需使用文本编辑器编辑pemfile.pem和删除违规证书(及其之前的"行包属性").

接下来,将编辑的PEM文件加载到新的PKCS12文件中.此时,您需要为cert/key指定适当的密钥库别名,例如"tomcat".

openssl pkcs12 -export -in pemfile.pem -name tomcat -out new.p12
Run Code Online (Sandbox Code Playgroud)

最后,从PKCS12转换回JKS:

keytool -importkeystore -srckeystore new.p12 -destkeystore new.jks -srcstoretype pkcs12
Run Code Online (Sandbox Code Playgroud)

该文件new.jks是你想要的.


小智 5

keytool -delete -alias -keystore lib/security/cacerts -storepass changeit