使用openssl为SAN证书生成CSR的步骤

时间:2020-02-23 14:40:11  来源:igfitidea点击:

在本教程中,我们将学习SAN证书以及为SAN证书生成CSR的步骤。

什么是SAN(Subject Alternative name)证书

  • " SAN"是" S"ubject " A"lternative " N" ame的首字母缩写。

  • 这些证书通常比单名称证书花费更多,因为它们具有更多功能。

  • 当我们请求SAN证书时,可以选择定义该证书可以保护的多个DNS名称。

  • 颁发后,SAN证书将包含一个主要的DNS名称,通常是的主要名称,并且在证书属性的更内部,我们会找到列出的在请求期间指定的其他DNS名称。

  • 该单个证书可以安装在Web服务器上,并用于验证证书中包含的任何DNS名称的流量。

  • 例如,查看facebook.com的证书。
    它使用在证书中定义了多个DNS的使用者备用名称,因此避免了为每个子域创建多个证书。

生成私钥

首先,我们需要一个私钥。
现在,我可以组合步骤以生成SAN的私钥和CSR,但让我们保持简单。
我尚未为私钥分配任何密码短语,我们也可以使用-des3加密算法将密码短语添加到私钥中

# openssl genrsa -out priv.key 4096
Generating RSA private key, 4096 bit long modulus (2 primes)
.......................................................++++
.................++++
e is 65537 (0x010001)

重要的提示:

我们必须安全保存私钥,因为此CSR仅适用于此私钥。

生成SAN证书的CSR

我们将不使用完整的/etc/pki/tls/openssl.cnf,而是仅使用必需的参数创建自己的自定义ssl配置文件。
要为SAN生成CSR,我们需要distinguished_name和req_extensions

我还在此配置文件中添加了各个distinguished_name参数的值,以避免出现用户提示。
如果我们不熟悉这些参数,那么建议我们阅读初学者指南,以了解与openssl和openssl配置文件一起使用的所有与证书相关的术语

# cat server_cert.cnf
[req]
distinguished_name = req_distinguished_name
req_extensions = req_ext
prompt = no
[req_distinguished_name]
C   = IN
ST  = Karnataka
L   = Bengaluru
O   = theitroad
OU  = R&D
CN  = ban21.example.com
[req_ext]
subjectAltName = @alt_names
[alt_names]
IP.1 = 10.10.10.13
IP.2 = 10.10.10.14
IP.3 = 10.10.10.17
DNS.1 = centos8-2.example.com
DNS.2 = centos8-3.example.com

如果我们希望手动输入CSR详细信息,例如"国家/地区","州","通用名称"等,则可以使用此配置文件

[req]
[req]
distinguished_name = req_distinguished_name
req_extensions = req_ext
[req_distinguished_name]
countryName                     = Country Name (2 letter code)
stateOrProvinceName             = State or Province Name (full name)
localityName                    = Locality Name (eg, city)
organizationalUnitName          = Organizational Unit Name (eg, section)
commonName                      = Common Name (eg, your name or your server\'s hostname)
emailAddress                    = Email Address
[req_ext]
subjectAltName = @alt_names
[alt_names]
IP.1 = 10.10.10.13
IP.2 = 10.10.10.14
IP.3 = 10.10.10.17
DNS.1 = centos8-2.example.com
DNS.2 = centos8-3.example.com

接下来,我们将使用openssl来生成SAN证书的证书签名请求。

# openssl req -new -key priv.key -out ban21.csr -config server_cert.cnf

由于我们使用了prompt = no并且还提供了CSR信息,因此该命令没有`output',但是生成了我们的CSR

# ls -l ban21.csr
-rw-r--r-- 1 root root 1842 Aug 10 15:55 ban21.csr

验证CSR中的使用者备用名称值

接下来,验证证书签名请求的内容,以确保它包含"请求的扩展名"下的"主题备用名称"部分

# openssl req -noout -text -in ban21.csr | grep -A 1 "Subject Alternative Name"

openssl使用者替代名称

因此,我们的CSR包含在生成SAN的CSR时提供的所有IP地址和DNS值。