Bootstrap

openssl颁发包含主题替代名的证书–SAN

原文地址:openssl颁发包含主题替代名的证书–SAN – 无敌牛

欢迎参观我的个人博客:无敌牛 – 技术/著作/典籍/分享等

在 X.509 证书中,commonName(CN)字段只能有一个值。如果让证书支持多个域名和IP地址,需要用到主题替代名称–subjectAltName。

第一步,制作CA根证书

和往期文章:自签名证书 – 无敌牛 中的1.11.2步骤是一样。操作如下图:

第二步:颁发证书

需要用到5个文件:

1、第一步产生的CA私钥

2、第一步产生的CA根证书

3、服务端需要创建一个私钥,一般扩展名为 .key

4、服务端需要创建证书配置文件,一般扩展名为 .csr

5、服务端用自己的私钥和配置文件出创建一个证书请求文件,一般扩展名为 .crt

2.1 创建服务端的私钥

指令:openssl genrsa -out private.key 2048 和第一步创建私钥的方法是一样的

2.2 创建证书配置文件

命名为:csr.conf

default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = req_distinguished_name
req_extensions = v3_req

[req_distinguished_name]
countryName = CN
stateOrProvinceName = Shandong
localityName = Qingdao
organizationName = madbull
organizationalUnitName = IT
commonName = node1
emailAddress = [email protected]

[v3_req]
subjectAltName = @alt_names

[alt_names]
DNS.1 = node1
DNS.2 = madbull.site
DNS.3 = localhost
IP.1 = 127.0.0.1
IP.2 = 192.168.1.123

其中 commonName 和 alt_names的配置 根据自己的实际情况填写 域名和主机名。

配置解释:

default_bits: 设置默认的密钥长度为 2048 位。

prompt: 设置为 no,表示在生成 CSR 时不提示用户输入信息,而是使用配置文件中的默认值。

default_md: 设置默认的消息摘要算法为 SHA-256。

distinguished_name: 指向 [req_distinguished_name] 段,定义了证书请求的基本信息。

req_extensions: 指向 [v3_req] 段,定义了证书请求中的扩展字段。

subjectAltName: 指向 [alt_names] 段

2.3 生成证书请求文件

指令:openssl req -new -key private.key -out req.csr -config csr.conf

注意,这里多了指定配置文件 -config csr.conf

可用:openssl req -in req.csr -noout -text 查看请求证书文件内容。

2.4 颁发证书

指令:openssl x509 -req -in req.csr -CA root-ca.crt -CAkey root-ca.key -CAcreateserial -out public.crt -days 10240 -sha256 -extensions v3_req -extfile csr.conf

注意,这里多了指定扩展段名称和配置文件 -extensions v3_req -extfile csr.conf

可用:openssl x509 -in public.crt -noout -text 查看证书内容。


自此,当前目录下有7个文件,对于服务端只需要私钥和证书就可以了。下面分别介绍一下这些都是什么文件:

csr.conf: 证书配置文件

private.key: 服务端私钥

public.crt: 服务端证书

req.csr: 服务端生成的证书请求文件

root-ca.crt: CA根的证书

root-ca.key: CA根的私钥

root-ca.srl: 上次颁发证书用到的证书编号

;