在 Java cacerts 中导入根证书和中间证书的正确方法

dpl*_*esa 2 java ssl certificate ssl-certificate x509certificate

我公司有自己的ROOT证书。他们使用这个证书签署了intermediate证书。

然后我们发布server证书的CSR并用intermediate证书签名。

什么是导入正确的方式ROOT证书,并intermediate在Java中cacerts文件,以便能够建立与已在服务器SSL连接server证书由签署intermediate

我使用 OpenSSL 来测试服务器上的证书链:

openssl s_client -showcerts -connect host:443

CONNECTED(00000003)
depth=0 C = COUNTRYCODE, ST = myCountry, O = myOrganization, CN = myServer, emailAddress = myMail
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 C = COUNTRYCODE, ST = myCountry, O = myOrganization, CN = myServer, emailAddress = myMail
verify error:num=27:certificate not trusted
verify return:1
depth=0 C = COUNTRYCODE, ST = myCountry, O = myOrganization, CN = myServer, emailAddress = myMail
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
 0 s:/C=COUNTRYCODE/ST=myCountry/O=myOrganization/CN=myServer/emailAddress=myMail
   i:/CN=INTERMEDIATECERT
-----BEGIN CERTIFICATE-----
MIIFr...
-----END CERTIFICATE-----
---
Server certificate
subject=/C=COUNTRYCODE/ST=myCountry/O=myOrganization/CN=myServer/emailAddress=myMail
issuer=/CN=INTERMEDIATECERT
---
No client certificate CA names sent
---
SSL handshake has read 1601 bytes and written 589 bytes
---
New, TLSv1/SSLv3, Cipher is AES256-SHA
Run Code Online (Sandbox Code Playgroud)

ped*_*ofb 8

您只需要在信任库中导入根证书。

 keytool -import -trustcacerts -keystore path/to/cacerts -storepass changeit  -alias aliasName -file path/to/certificate.cer
Run Code Online (Sandbox Code Playgroud)

握手期间的 SSL 服务器应提供证书和中间件。您客户端的 TrustManager 将验证认证链,直到找到根

注意:建议使用自己的truststore,不要修改cacerts