TLS 证书生成和使用

TLS 证书基础知识参考 TLS 如何保证网络通讯安全

这一篇主要介绍证书的生成,以及在Java项目中的应用

证书生成步骤:

  1. 生成 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
    
  2. 生成 Server 私钥及证书
    # 生成 server 私钥 server.key.pem
    openssl genrsa -out server.key.pem 2048
    # 生成 server 证书配置文件 server.cnf
    cat <  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
    
  3. 生成 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
    
  4. 生成 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
    

你可能感兴趣的:(TLS 证书生成和使用)