生成带subjectAltName的ssl服务端证书【亲测有效】
Chrome浏览器的证书验证规则比Edge和Firefox更严格,如果证书不包含SubjectAltName,Chrome会认为其不安全,所以自签证书时要添加做额外配置来添加SubjectAltName。【这个问题困扰了我两天,尝试过很多网上的方法,都没用,崩溃】
- 说明:
- 证书制作过程在Centos7环境进行,且使用Centos7自带的OpenSSL工具。
- 不需要生成CA相关文件,直接生成服务端证书。
- 浏览器需要将生成的server.crt证书安装到【受信人的根证书颁发机构】下。
- Nginx需要同时配置上server.crt和server.key两个文件。
- 浏览器还要修改本地C:\Windows\System32\drivers\etc\hosts文件,配置证书所对应站点的域名,在浏览器本机的DNS映射。
建议先创建一个空目录,作为证书制作空间,后续所有操作都在该目录下进行。
- 首先新建一个小配置文件mySsl.conf,只包含如下内容:
[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
req_extensions = req_ext
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = cn
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = sc
localityName = Locality Name (eg, city)
localityName_default = cd
organizationName = Organization Name (eg, company)
organizationName_default = my
organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = as
commonName = Common Name (e.g. server FQDN or YOUR name)
commonName_max = 64
commonName_default = yang.com
[ req_ext ]
subjectAltName = @alt_names
# 此段落标题的方括号两边【没有空格】,只有同时配有IP和域名,才能在IP和域名访问时都成功识别。
[alt_names]
IP.1 = 192.168.50.62
DNS.1 = yang.com
DNS.2 = yang.net
- 生成私钥:
openssl genrsa -out server.key 4096
- 生成证书请求:
CSR是Certificate Signing Request的英文缩写,即证书请求,是证书申请者在向CSP(加密服务提供者)申请数字证书时,由在CSP生成私钥时一并生成证书请求。证书申请者只要把CSR文件提交给证书颁发机构,证书颁发机构使用其根证书私钥签名,就生成了证书公钥文件,此公钥文件就是颁发给用户的证书。
openssl req -new -sha256 -out server.csr -key server.key -config mySsl.conf
这里会要求输入一系列参数,可以选择不填直接回车。
- 检查证书申请内容:
openssl req -text -noout -in server.csr
应该可以看到:
X509v3 Subject Alternative Name:
IP Address:192.168.50.62, yang.com, DNS:yang.com, DNS:yang.net
- 利用证书请求生成证书,执行如下命令:
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt -extensions req_ext -extfile mySsl.conf
学习使我充实,分享给我快乐!