生成公私钥对 🔑
根据不同环境,可以使用多种方式生成密钥及证书。以下提供三种标准方法: RSA 、 EC(椭圆曲线) 以及 Java keytool(适用于 Java 环境)。请务必将示例中的参数替换为您自己的值。
[!NOTE|style:flat] Cactus Custody 强烈建议所有公钥和私钥均在服务器端生成,并以安全方式分配给用户,以确保安全性。
RSA 标准
# 生成 RSA 私钥及自签名证书(4096位,有效期 365 天)
openssl req -x509 -nodes -days 365 -newkey rsa:4096 \
-keyout <PRIVATE_KEY_FILENAME>.key \
-out <CERT_FILENAME>.crt \
-subj "/C=<国家>/ST=<省份>/L=<城市>/O=<组织>/OU=<部门>/CN=<域名>"
# 导出为 PKCS#12 格式的密钥库
openssl pkcs12 -export \
-inkey <PRIVATE_KEY_FILENAME>.key \
-in <CERT_FILENAME>.crt \
-out <KEYSTORE_FILENAME>.p12 \
-name <ALIAS>
# 提取公钥为 PEM 格式
openssl x509 -in <CERT_FILENAME>.crt -pubkey -noout > <CERT_FILENAME>.pub.pem
参数说明:
<PRIVATE_KEY_FILENAME>
→ 私钥文件名,例如server
<CERT_FILENAME>
→ 证书文件名,例如server
<KEYSTORE_FILENAME>
→ 密钥库文件名,例如keystore
<ALIAS>
→ 密钥库别名,例如mykey_rsa
/C=SG/ST=Singapore/L=Singapore/O=Example Inc/OU=IT/CN=example.com
→ 组织和域名详情的输入示例。提示 :/C=… 的国家代码必须是 2 位字母, 不能只有 1 位,也不能超过 2 位。
EC(椭圆曲线)标准
# 生成 EC 私钥
openssl ecparam -name prime256v1 -genkey -noout -out <PRIVATE_KEY_FILENAME>.key
# 生成 CSR(证书签名请求)
openssl req -new -key <PRIVATE_KEY_FILENAME>.key -out <CSR_FILENAME>.csr \
-subj "/C=<国家>/ST=<省份>/L=<城市>/O=<组织>/OU=<部门>/CN=<域名>"
# 生成自签名证书(有效期 365 天)
openssl x509 -req -in <CSR_FILENAME>.csr -signkey <PRIVATE_KEY_FILENAME>.key \
-out <CERT_FILENAME>.crt -days 365
# 导出为 PKCS#12 格式的密钥库
openssl pkcs12 -export \
-inkey <PRIVATE_KEY_FILENAME>.key \
-in <CERT_FILENAME>.crt \
-out <KEYSTORE_FILENAME>.p12 \
-name <ALIAS>
# 提取公钥为 PEM 格式
openssl x509 -in <CERT_FILENAME>.crt -pubkey -noout > <CERT_FILENAME>.pub.pem
参数说明:
<PRIVATE_KEY_FILENAME>
→ 私钥文件名,例如server_ec
<CSR_FILENAME>
→ CSR 文件名,例如server_ec
<CERT_FILENAME>
→ 证书文件名,例如server_ec
<KEYSTORE_FILENAME>
→ 密钥库文件名,例如keystore_ec
<ALIAS>
→ 密钥库别名,例如mykey_ec
/C=SG/ST=Singapore/L=Singapore/O=Example Inc/OU=IT/CN=example.com
→ 组织和域名详情的输入示例。提示 :/C=… 的国家代码必须是 2 位字母, 不能只有 1 位,也不能超过 2 位。
Java Keytool 标准(仅限 Java 环境)
# 使用 keytool 生成密钥库及私钥
keytool -genkey -v \
-alias <YOUR_ALIAS> \
-keyalg EC \
-sigalg SHA256withECDSA \
-deststoretype pkcs12 \
-keystore <FILE_NAME>.jks \
-dname "C=<COUNTRY>,ST=<STATE>,L=<CITY>,O=<ORG>,OU=<DEPT>,CN=<DOMAIN>" \
-validity 365 \
-storepass <STOREPASS_PASSWORD> \
-keypass <KEYPASS_PASSWORD>
# 导出证书
keytool -export -alias <YOUR_ALIAS> -keystore <FILE_NAME>.jks \
-storepass <STOREPASS_PASSWORD> -rfc -file <FILE_NAME>.cer
# 提取公钥为 PEM 格式
openssl x509 -in <FILE_NAME>.cer -pubkey -noout > <FILE_NAME>.pub.pem
参数说明:
<YOUR_ALIAS>
→ 密钥库别名,例如myapikey
<FILE_NAME>
→ 基础文件名(不带扩展名)<STOREPASS_PASSWORD>
→ 用于保护整个 keystore 文件的密码。(仅支持 ASCII 字符集)<KEYPASS_PASSWORD>
→ 用于访问 keystore 中某个私钥的密码。(仅支持 ASCII 字符集)C=SG,ST=Singapore,L=Singapore,O=Example Inc,OU=IT,CN=example.com
→ 组织和域名详情的输入示例。提示 :C=… 的国家代码必须是 2 位字母, 不能只有 1 位,也不能超过 2 位。