在 Ubuntu 上为 Java 配置 SSL 的实用步骤
一 准备与定位 Java 环境
java -versionreadlink -f $(which java)(通常位于 /usr/lib/jvm/ 下)二 场景一 让 Java 程序信任某个 HTTPS 站点证书
echo | openssl s_client -servername 域名 -connect 域名:443 2>/dev/null | openssl x509 -outform PEM > 域名.pemkeytool -importcert -alias 域名 -file 域名.pem -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeitkeytool -list -v -keystore $JAVA_HOME/jre/lib/security/cacerts -alias 域名三 场景二 为 Tomcat 启用 HTTPS(服务端证书)
openssl pkcs12 -export -in certificate.crt -inkey private.key -out keystore.p12 -name tomcat -cafile ca_bundle.crt -caname root -chain<Connector port="8443"
protocol="org.apache.coyote.http11.Http11NioProtocol"
SSLEnabled="true"
maxThreads="150"
scheme="https"
secure="true"
clientAuth="false"
sslProtocol="TLS"
keystoreFile="/opt/tomcat/conf/keystore.p12"
keystorePass="你的导出密码"
keystoreType="PKCS12"
keyAlias="tomcat" />
sudo cp 域名.crt /usr/local/share/ca-certificates/ && sudo update-ca-certificatessudo cp 域名.crt /etc/pki/ca-trust/source/anchors/ && sudo update-ca-trust四 常见问题与排查
五 补充 开发与测试用的自签名证书
openssl genrsa -des3 -out myCA.key 2048 与 openssl req -x509 -new -nodes -key myCA.key -sha256 -days 7300 -out myCA.crtopenssl genrsa -out localhost.key 2048 与 openssl req -new -key localhost.key -out localhost.csrauthorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
IP.1 = 127.0.0.1
openssl x509 -req -in localhost.csr -out localhost.crt -days 3650 -CA myCA.crt -CAkey myCA.key -CAcreateserial -extfile cert.extopenssl verify -CAfile myCA.crt localhost.crtopenssl pkcs12 -export -in localhost.crt -inkey localhost.key -out server.p12