TLS 证书基础知识参考 TLS 如何保证网络通讯安全
这一篇主要介绍证书的生成,以及在Java项目中的应用
证书生成步骤:
- 生成 CA 私钥以及证书
# 生成 CA 私钥 ca.key.pem openssl genrsa -out ca.key.pem 4096 # 生成 CA 证书 ca.cert.pem openssl req -key ca.key.pem -new -x509 -days 7300 \ -sha256 -out ca.cert.pem -subj /CN=ca -extensions v3_ca
- 生成 Server 私钥及证书
# 生成 server 私钥 server.key.pem openssl genrsa -out server.key.pem 2048 # 生成 server 证书配置文件 server.cnf cat <<EOF > server.cnf [ req ] default_bits = 2048 distinguished_name = req_distinguished_name req_extensions = req_ext [ req_distinguished_name ] [ req_ext ] basicConstraints = CA:FALSE subjectAltName = @alt_names [ alt_names ] DNS.1 = localhost DNS.2 = *test-server-001 IP.1 = 127.0.0.1 EOF # 生成 server 证书请求文件 server.csr.pem openssl req -key server.key.pem -new -sha256 -out server.csr.pem \ -subj /CN=server -config server.cnf # 生成 server 证书 server.cert.pem openssl x509 -req -CA ca.cert.pem -CAkey ca.key.pem \ -CAcreateserial -in server.csr.pem -out server.cert.pem -days 365 \ -extensions req_ext -extfile server.cnf
- 生成 Client 私钥及证书
# 生成 client 私钥 client.key.pem openssl genrsa -out client.key.pem 2048 # 生成 client 证书请求文件 client.csr.pem openssl req -key client.key.pem -new -sha256 -out client.csr.pem -subj /CN=client # 生成 client 证书 client.cert.pem openssl x509 -req -CA ca.cert.pem -CAkey ca.key.pem \ -CAcreateserial -in client.csr.pem -out client.cert.pem -days 365
- 生成 Java 使用的证书形式 Truststore 和 Keystore
# 使用 JDK 自带工具生成 truststore keytool -import -alias 1 -file ca.cert.pem -keystore ca.truststore -storepass daniel # 生成 server 的 Keystore server.keystore openssl pkcs12 -export -in server.cert.pem -inkey server.key.pem \ -chain -CAfile ca.cert.pem -out server.p12 -password pass:daniel keytool -importkeystore -destkeystore server.keystore -srckeystore server.p12 \ -srcstoretype PKCS12 -alias 1 -storepass daniel # 生成 client 的 Keystore client.keystore openssl pkcs12 -export -in client.cert.pem -inkey client.key.pem \ -chain -CAfile ca.cert.pem -out client.p12 -password pass:daniel keytool -importkeystore -destkeystore client.keystore -srckeystore client.p12 \ -srcstoretype PKCS12 -alias 1 -storepass daniel