使用 OpenSSL 生成多域名/IP的自签名证书
在现代网站的配置中,常常需要为多个子域名或不同的域名配置 SSL/TLS 证书。对于开发和测试环境,使用自签名证书是一个方便且经济的选择。OpenSSL 是一个广泛使用的工具,支持生成自签名证书。本文将详细介绍如何通过 OpenSSL 生成一个多域名(SAN,Subject Alternative Name)自签名证书。
步骤概览
- 创建一个 OpenSSL 配置文件,指定多个域名。
- 使用 OpenSSL 生成私钥。
- 生成 CSR(证书签名请求)。
- 使用 OpenSSL 生成自签名证书,包含多个域名。
步骤 1:创建 OpenSSL 配置文件
首先,您需要创建一个自定义的 OpenSSL 配置文件,在该配置文件中指定所有需要包含的域名。默认情况下,OpenSSL 的配置文件通常位于 /etc/ssl/openssl.cnf
,但为了避免更改默认文件,您可以创建一个新的配置文件。
- 在您的工作目录中创建一个名为
openssl.cnf
的文件,内容如下:
[ req ]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = CN
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = JiangSu
localityName = Locality Name (eg, city)
localityName_default = NanJing
organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = My Organization
commonName = Internet Widgits Ltd
commonName_max = 64
[ v3_req ]
subjectAltName = @alt_names
[ alt_names ]
# 改成自己的域名
DNS.1 = example.com
DNS.2 = www.example.com
DNS.3 = example.net
DNS.4 = www.example.net
# 改成自己的ip
IP.1 = 192.168.1.100
IP.2 = 192.168.1.200
这个配置文件的 subjectAltName
部分定义了多个域名。通过这种方式,您可以为多个域名/IP生成一个证书。例如,在上面的配置中,我们为 example.com
、www.example.com
、example.net
、 www.example.net
以及IP192.168.1.100
和 192.168.1.200
配置了证书。
步骤 2:生成私钥
在 OpenSSL 中,私钥用于加密和解密数据,确保通信的安全性。使用以下命令生成私钥:
openssl genpkey -algorithm RSA -out privkey.pem -aes256
此命令将生成一个 2048 位的 RSA 私钥,并使用 AES 256 加密对其进行保护。生成的私钥将保存在 privkey.pem
文件中。
步骤 3:生成证书签名请求(CSR)
使用以下命令生成证书签名请求(CSR),您可以根据实际需求选择是否填写额外的字段。
openssl req -new -key privkey.pem -out cert.csr -config openssl.cnf
此命令将使用之前生成的私钥和配置文件生成一个 CSR 文件,保存为 cert.csr
。
步骤 4:生成自签名证书
通过以下命令,您可以根据之前生成的 CSR 文件和私钥,生成一个自签名证书,并将其保存在 cert.crt
文件中:
openssl x509 -req -in cert.csr -signkey privkey.pem -out cert.crt -days 365 -extensions v3_req -extfile openssl.cnf
这里的 -days 365
参数表示证书的有效期为 365 天。您可以根据需要调整有效期。-extensions v3_req
表示我们会使用 openssl.cnf
配置文件中的 v3_req
扩展来添加 SAN(Subject Alternative Name)。
步骤 5:验证证书
证书生成后,您可以通过以下命令检查证书是否包含了所有的 SAN 域名:
openssl x509 -in cert.crt -noout -text
在输出中,您应该能够看到类似以下的内容,其中列出了所有的域名:
X509v3 Subject Alternative Name:
DNS:example.com, DNS:www.example.com, DNS:example.net, DNS:www.example.net, IP Address:192.168.1.100, IP Address:192.168.1.200
总结
通过 OpenSSL 创建多域名自签名证书的过程实际上非常简单,只需要几个步骤即可完成。首先需要配置一个 OpenSSL 配置文件,指定多个域名,接着生成私钥、CSR 文件,最后使用 OpenSSL 生成自签名证书并验证其有效性。使用这种方式,您可以为开发环境中的多个域名快速生成自签名证书,便于测试和开发。
请注意,虽然自签名证书对于开发和内部测试非常方便,但由于它们没有经过公认的证书颁发机构签名,因此在生产环境中,浏览器和客户端会显示安全警告。在生产环境中,建议您使用受信任的证书颁发机构(CA)签发的证书。
- 作者:xmlwch
- 原文链接:https://m730.xmlwch.cn/2024/11/11/chlinux/make-cert-multiple.html
- 版权声明:本作品采用 知识共享 署名-相同方式共享 4.0 国际(CC BY-SA 4.0)许可协议 进行许可,转载无需与我联系,但请注明出处。