使用 OpenSSL 创建多域名证书

一 概述

一般使用自签名证书的情况下,我们都习惯的使用 *.domain.com 这种通配符证书,也叫 泛域名证书,在使用上没有任何影响,甚至会更加便利。

但是也不排除在一些严格要求,不允许申请和使用泛域名证书的情况下,我们需要使用一张包含多域名的证书。

二 具体操作

  1. 自生成一个根 CA。
  2. 生成证书申请的配置信息文件。
  3. 使用该配置信息文件进行生成 *.csr 证书签名请求文件。
  4. 使用该请求文件向第一步生成的根 CA 进行申请证书。

2.1 创建自签名根 CA 证书

Notes:
如果已经存在,或者有其它的可靠根 CA 的话,这一步可以跳过。
# 1. 创建一个临时目录
mkdir openssl_san/
cd openssl_san/

# 2. 使用 OpenSSL 生成自签名根 CA,长度为 2048 bit(可自行修改为 4096 bit)
openssl genrsa -out CA.pem 2048
# 返回
# Generating RSA private key, 2048 bit long modulus
# ..............................+++
# .............................................................+++
# e is 65537 (0x10001)

# 3. 生成根证书的 CSR 签发申请文件
openssl req \
  -new \
  -key CA.pem \
  -out CA.csr \
  -subj "/C=CN/ST=GuangZhou/L=China/OU=Domain/CN=CA"

# 4. 使用 CSR 文件对 CA.pem 进行自签发
openssl x509 \
  -req \
  -days 3650 \
  -sha1 \
  -extensions v3_ca \
  -signkey CA.pem \
  -in CA.csr \
  -out CA.cer
# 返回:
# Signature ok
# subject=/C=CN/ST=GuangZhou/L=China/OU=Domain/CN=CA
# Getting Private key

# 自此,我们有了自己的根 CA。

2.2 使用根 CA 进行签发证书

当我们有了根 CA 之后,即可使用 CA 证书进行签发新的证书:

# 1. 编写证书配置信息文件
cat > ssl.conf <<EOF
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req

[req_distinguished_name]
countryName = CN
countryName_default = CN
stateOrProvinceName = GuangZhou
stateOrProvinceName_default = GuangZhou
localityName = China
localityName_default = China
organizationalUnitName  = Domain
organizationalUnitName_default  = Domain
commonName = *.domain.com
commonName_max  = 64

[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:false
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

# 配置该证书的可用域名
[alt_names]
DNS.1 = www.domain.com
DNS.2 = mail.domain.com
DNS.3 = code.domain.com
EOF

# 2. 创建下级证书私钥
openssl genrsa -out domain.key 2048

# 3. 使用 ssl.conf 文件生成证书的请求文件
openssl req \
  -new \
  -key domain.key \
  -config ssl.conf \
  -out domain.csr \
  -subj "/C=CN/ST=GuangZhou/L=China/OU=Domain/CN=IT"

# 4. 使用 domain.csr 向 CA 申请签发
openssl x509 \
  -req \
  -days 3650 \
  -in domain.csr \
  -CA CA.cer \
  -CAcreateserial \
  -CAkey CA.pem \
  -out domain.crt \
  -extensions v3_req \
  -extfile ssl.conf
# 返回:
# Signature ok
# subject=/C=CN/ST=GuangZhou/L=China/OU=Domain/CN=IT
# Getting CA Private Key

# 过程中生成的 domain.crt 和 domain.key 即是后续可用于 Nginx 的 SSL 证书

2.3 验证

# 1. 查看证书是否多域名
openssl \
  x509 \
  -noout \
  -text \
  -in domain.crt |grep -A 1 'Subject Alternative'

# 返回:
X509v3 Subject Alternative Name:
  DNS:www.domain.com, DNS:mail.domain.com, DNS:code.domain.com

# 2. 检查证书是否被证书
openssl verify -CAfile CA.cer domain.crt
# 返回:
# domain.crt: OK
原创不易,转载时请标明作者及出处。
作者:打个小肥鸡
转自:https://www.sretalk.com/?p=75
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇