You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从现有P12/PEM证书生成含备用DNS名称的证书请求

如何从现有P12/PEM证书生成含备用DNS名称的证书请求

我来帮你梳理清楚怎么从现有的P12/PEM生成带备用DNS名称(SAN)的证书请求,分两种常用工具的方法,你可以选顺手的来操作:


方法一:用OpenSSL处理(推荐,配置更灵活)

步骤1:确认/提取私钥

首先得确保你有可用的私钥文件。如果你的certserver.pem已经包含私钥(可以用openssl rsa -in certserver.pem -check验证),那直接用就行;如果没有,从P12文件里提取:

# 从P12提取加密的私钥
openssl pkcs12 -in certserver.p12 -nocerts -out certserver.key -passin file:certserver.pass

# (可选)解密私钥,后续生成CSR时不用重复输入密码
openssl rsa -in certserver.key -out certserver.decrypted.key -passin file:certserver.pass

步骤2:创建SAN配置文件

因为OpenSSL命令行没法直接在生成CSR时指定多个备用DNS,所以得写个配置文件(比如命名为csr_config.cnf),把基本信息和SAN都填进去:

[req]
default_bits       = 2048
distinguished_name = req_distinguished_name
req_extensions     = req_ext
prompt             = no

[req_distinguished_name]
C  = 你的国家代码(比如CN)
ST = 省份/州
L  = 城市
O  = 公司名称
OU = 部门名称
CN = 主域名(比如your-server.example.com)

[req_ext]
subjectAltName = @alt_names

[alt_names]
DNS.1 = 主域名
DNS.2 = 备用域名1
DNS.3 = 备用域名2
# 按需添加更多DNS条目

记得把上面的占位信息替换成你实际的内容。

步骤3:生成带SAN的CSR

用私钥和配置文件生成证书请求:

# 如果用解密后的私钥
openssl req -new -key certserver.decrypted.key -out new_cert_request.csr -config csr_config.cnf

# 如果用加密的私钥,会提示输入密码(或者用-passin参数指定密码文件)
openssl req -new -key certserver.key -out new_cert_request.csr -config csr_config.cnf -passin file:certserver.pass

验证CSR是否包含SAN

生成后可以检查一下确保SAN已经加进去了:

openssl req -in new_cert_request.csr -noout -text

在输出里找Subject Alternative Name部分,确认所有备用DNS都列出来了。


方法二:用Keytool处理(适合Java环境用户)

步骤1:查看P12里的别名

Keytool需要指定证书对应的别名,先查一下:

keytool -list -keystore certserver.p12 -storepass file:certserver.pass

输出里会显示别名(通常是1或者你当初设置的自定义名称)。

步骤2:创建SAN扩展文件

新建一个文本文件(比如san_extensions.txt),内容如下:

subjectAltName=DNS:主域名,DNS:备用域名1,DNS:备用域名2

同样替换成你实际的域名。

步骤3:生成CSR

用Keytool从P12直接生成带SAN的证书请求:

keytool -certreq -alias 你查到的别名 -keystore certserver.p12 -storepass file:certserver.pass -file new_cert_request.csr -ext san_extensions.txt

验证CSR

检查生成的CSR是否包含正确的SAN:

keytool -printcertreq -file new_cert_request.csr

看输出里的Extension:部分,找到SubjectAlternativeName确认内容。


小提示

  • 私钥文件权限要注意,尽量设置成chmod 600 certserver.key,避免被其他用户读取。
  • 密码文件certserver.pass也要做好权限控制,别泄露出去。
  • 如果你的旧证书里已经有SAN信息,也可以从旧证书里提取SAN配置,省得手动输入:openssl x509 -in certserver.pem -noout -text | grep -A 10 "Subject Alternative Name",然后把内容复制到配置文件里。

备注:内容来源于stack exchange,提问作者Thomas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 11:59:30