教程 · 2020年11月1日 0

使用openssl命令生成RSA证书

内容纲要

最近经常用到,所以先记录一下

openssl genrsa 2048 > ca-key.pem # CA 私钥
openssl req -new -x509 -nodes -days 36500 -key ca-key.pem -out ca-cert.pem # CA 证书
openssl req -newkey rsa:2048 -days 36500 -nodes -keyout server-key.pem -out server-req.pem # 服务器私钥
openssl rsa -in server-key.pem -out server-key.rsa # 转换为 RSA 格式
openssl x509 -req -in server-req.pem -days 36500 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem # 服务器证书
openssl verify -CAfile ca-cert.pem server-cert.pem # 验证
openssl req -newkey rsa:2048 -days 36500 -nodes -keyout client-key.pem -out client-req.pem # 客户端私钥
openssl rsa -in client-key.pem -out client-key.rsa # 转换为 RSA 格式
openssl x509 -req -in client-req.pem -days 36500 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem # 客户端证书
openssl verify -CAfile ca-cert.pem client-cert.pem # 验证

Gist

需要注意的是生成 CA 根证书时的 Common Name 不能和服务器或客户端证书一样,但服务器和客户端的 Common Name 必须一致。

如果需要生成 java 格式的 jks 证书,继续输入以下命令

openssl pkcs12 -export -in client-cert.pem -inkey client-key.pem -name [上面服务器证书的Common Name] -passout pass:密码 -out client-keystore.p12
keytool -importkeystore -srckeystore client-keystore.p12 -srcstoretype pkcs12 -srcstorepass 密码 -destkeystore client.jks -deststoretype JKS -deststorepass 123456
keytool -importcert -alias [根证书的Common Name] -file ca-cert.pem -keystore truststore -storepass 123456