生成公私钥对 🔑

根据不同环境,可以使用多种方式生成密钥及证书。以下提供三种标准方法: RSAEC(椭圆曲线) 以及 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 位。
Copyright © 2025 Cactus Custody all right reserved,powered by GitbookUpdated: 01-Oct-2025 03:41:45

results matching ""

    No results matching ""

    results matching ""

      No results matching ""