我的任务是在服务器中设置 ssl,该服务器使用 wildfly,所以我必须创建一个密钥库,其中包含我获得的所有证书、服务器证书、中间证书和密钥文件。
首先,我将服务器证书和中间证书链接起来,然后使用 openssl 创建 pkc12 文件。然后,我使用 keytool 从该 pkc12 文件创建密钥库。
问题是,当我打开密钥库文件或 pkc12 文件时,我发现它不包含中间证书,只有服务器证书。我以前做过这个过程,而且成功了
谁知道可能是什么问题?
额外信息:中间证书有点旧(从 2010 年开始)并且使用 sha1 并将在 9 个月后过期,这很奇怪,不像我的服务器证书,它是新的并且使用 sha256。
答案1
显然您的问题可能是中间证书错误。
确保您拥有正确的中级证书。
对服务器证书运行以下命令:
openssl x509 -noout -text -in server.pem | grep 'CA Issuers'
然后打开grep找到的URL:
wget http://url/ -O intermediate.der
将下载的证书转换为PEM格式:
openssl x509 -in intermediate.der -inform DER -outform PEM -out intermediate.pem
现在您肯定知道这intermediate.pem
是您的服务器证书的正确中间证书。
假设链中只有一个中间证书。如果还有多个,则需要重复上述命令以intermediate.pem
获取证书intermediate2.pem
,依此类推。
运行以下命令来创建 JKS 存储。
创建证书包:
cat server.pem intermediate.pem > bundle.pem
创建 pfx/pkcs12 格式的包:
openssl pkcs12 -export -out bundle.pfx -inkey server.key -in bundle.pem
创建 JKS 密钥库:
keytool -importkeystore -srckeystore bundle.pfx -srcstoretype pkcs12 -destkeystore store.jks -deststoretype JKS
检查密钥库:
keytool -v -list -keystore store.jks
您应该看到下列内容:
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 1 entry
Alias name: 1
Creation date: May 19, 2019
Entry type: PrivateKeyEntry
Certificate chain length: 2
Certificate[1]:
Owner: CN=example.com
Issuer: CN=Let's Encrypt Authority X3, O=Let's Encrypt, C=US
...
Certificate[2]:
Owner: CN=Let's Encrypt Authority X3, O=Let's Encrypt, C=US
Issuer: CN=DST Root CA X3, O=Digital Signature Trust Co.
...