使用openssl为SAN证书生成CSR的步骤
在本教程中,我们将学习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值。