如何从X509证书开始为双向SSL生成Java证书(密钥库和信任库)

kgqe7b3p  于 2023-02-11  发布在  Java
关注(0)|答案(1)|浏览(215)

我已使用OpenSSL生成自签名证书:
根CA:cacert.crt(根CA证书)和root_key.pem(用于根私钥)。
客户端:client_cert. crt(客户端证书)和client_key.pem(用于私钥)。
服务器:server_cert. crt(服务器证书)和server_key.pem(用于私钥)。
客户端和服务器证书都使用根密钥签名。
据我所知,对于双向SSL,服务器信任库应该包括客户端证书,而客户端信任库应该包括服务器证书。
我的问题是如何使用keytool生成从这些证书/密钥开始的两对客户机/服务器trustore/keystore

7d7tgy0s

7d7tgy0s1#

经过一番研究,我发现以下步骤:
对于客户端密钥库:

openssl pkcs12 -export -out client.pfx -inkey client_key.pem -in client_cert.crt

对于客户端信任库:

keytool -import -file cacert.crt -alias cacert -keystore ClientTruststore
keytool -import -file client_cert.crt -alias servercert -keystore ClientTruststore

对于服务器密钥库:

openssl pkcs12 -export -out server_key.p12 -inkey server_key.pem -in server_cert.crt
SET PASSWORD=MyPassword
keytool -genkey -alias server -keyalg RSA -validity 3650 -keystore server.keystore -storepass %PASSWORD% -keypass %PASSWORD% 
keytool -importcert -alias rootCA -keystore server.keystore -storepass %PASSWORD% -keypass %PASSWORD% -file cacert.crt
keytool -v -importkeystore -srckeystore server_key.p12 -srcstoretype PKCS12 -destkeystore server.keystore -deststoretype JKS -deststorepass %PASSWORD%

对于服务器信任库:

keytool -import -file cacert.crt -alias cacert -keystore ServerTruststore
keytool -import -file client_cert.crt -alias client -keystore ServerTruststore

我用一个非常简单的SSL客户端/服务器通过运行以下程序进行了测试:

java -Djavax.net.ssl.keyStore=server.keystore -Djavax.net.ssl.keyStorePassword=MyPassword -Djavax.net.ssl.trustStore=ServerTruststore -Djavax.net.ssl.trustStorePassword=MyPassword -jar HelloServer.jar
java -Djavax.net.ssl.keyStore=client.pfx -Djavax.net.ssl.keyStorePassword=MyPassword -Djavax.net.ssl.trustStore=ClientTruststore -Djavax.net.ssl.trustStorePassword=MyPassword -jar HelloClient.jar

运作良好,欢迎提出任何改善建议。

相关问题