生成带有 SAN(Subject Alternative Name)的 HTTPS SSL 证书可以通过 OpenSSL 完成。以下是详细的步骤,包括创建 CA、生成服务器证书请求(CSR)、配置 SAN 并签发证书。
步骤 1:准备环境
确保你已经安装了 OpenSSL,并且有足够的权限来创建和管理证书文件。
步骤 2:创建根 CA
创建 CA 私钥
openssl genrsa -aes256 -out ca.key 4096
这将创建一个受密码保护的 4096 位私钥。如果你不希望私钥受密码保护,可以省略 -aes256 参数。
创建自签名 CA 证书
openssl req -x509 -new -nodes -key ca.key \
-sha256 -days 3650 \
-out ca.crt \
-subj "/C=CN/ST=Beijing/L=Beijing/O=qidaren/OU=IT Department/CN=drlg.b.cc"
步骤 3:创建服务器私钥和 CSR
创建服务器私钥
openssl genrsa -out drlg.b.cc.key 2048
创建 CSR
在创建 CSR 时,你需要指定一个配置文件来包含 SAN 配置。创建一个名为 openssl.cnf 的配置文件,内容如下:
[ req ]
default_bits = 2048
distinguished_name = req_distinguished_name
req_extensions = req_ext
[ req_distinguished_name ]
C = CN
ST = Beijing
L = Beijing
O = qidaren
OU = IT Department
CN = drlg.b.cc
[ req_ext ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = drlg.b.cc
DNS.2 = *.drlg.b.cc # 如果需要通配符支持
使用此配置文件生成 CSR:
openssl req -new -key drlg.b.cc.key -out drlg.b.cc.csr -config openssl.cnf
步骤 4:签发带 SAN 的服务器证书
使用 CA 私钥和证书来签发服务器证书,并确保包含 SAN:
openssl x509 -req -in drlg.b.cc.csr \
-CA ca.crt -CAkey ca.key \
-CAcreateserial \
-out drlg.b.cc.crt \
-days 365 \
-extfile openssl.cnf \
-extensions req_ext
签发客户端证书
openssl pkcs12 -export -out server.pfx -inkey drlg.b.cc.key -in drlg.b.cc.crt -certfile ca.crt
步骤 5:验证新证书
确认新证书是否正确包含了 SAN:
openssl x509 -in drlg.b.cc.crt -text -noout | grep -A1 "Subject Alternative Name"
你应该看到类似如下的输出,表明 SAN 已经被正确添加:
X509v3 Subject Alternative Name:
DNS:drlg.b.cc, DNS:*.drlg.b.cc
步骤 6:部署证书
将生成的 .crt 和 .key 文件部署到你的 Web 服务器中,并更新服务器配置以使用这些文件。
对于 Nginx
编辑你的 Nginx 配置文件,添加或修改以下指令:
server {
listen 443 ssl;
server_name drlg.b.cc;
ssl_certificate /path/to/drlg.b.cc.crt;
ssl_certificate_key /path/to/drlg.b.cc.key;
ssl_trusted_certificate /path/to/ca.crt; # 如果适用
ssl_client_certificate /www/server/panel/vhost/cert/bt.b.cc/ca.crt; # 客户端证书验证
ssl_verify_client on;# SSL 证书失效时拒绝访问
# 其他配置...
}
重启 Nginx 服务以使更改生效:
sudo systemctl restart nginx
对于 Apache
编辑你的 Apache 配置文件,添加或修改以下指令:
<VirtualHost *:443>
ServerName drlg.b.cc
SSLEngine on
SSLCertificateFile /path/to/drlg.b.cc.crt
SSLCertificateKeyFile /path/to/drlg.b.cc.key
SSLCertificateChainFile /path/to/ca.crt # 如果适用
# 其他配置...
</VirtualHost>
重启 Apache 服务以使更改生效:
sudo systemctl restart apache2
通过以上步骤,你应该能够成功生成并部署一个带有 SAN 的 HTTPS SSL 证书,从而确保浏览器能够正确验证域名与证书的匹配性,并消除“此服务器无法证实它就是 drlg.b.cc”的警告。如果遇到任何问题,请仔细检查每一步骤,确保所有文件路径和配置都正确无误。