如何为通过 Chrome 要求的 IP 地址创建自签名(或由自己的 CA 签名)SSL 证书

How to create a self-signed (or signed by own CA) SSL certificate for IP address that pass Chrome requirements

如何创建 Chrome 可以信任的自签名(或由自己的 CA 签名)的 SSL 证书(将 CA 证书添加到本地计算机后)。

证书必须对本地网络 IP、localhost 和多个域有效

  1. 准备用于非交互式(无提示)创建证书的配置文件

CA.cnf

[ req ]
prompt = no
distinguished_name = req_distinguished_name

[ req_distinguished_name ]
C = US
ST = Localzone     
L = localhost    
O = Certificate Authority Local Center
OU = Develop      
CN = develop.localhost.localdomain
emailAddress = root@localhost.localdomain

localhost.cnf

[req]
default_bits  = 2048
distinguished_name = req_distinguished_name
req_extensions = req_ext
x509_extensions = v3_req
prompt = no

[req_distinguished_name]
countryName = US
stateOrProvinceName = Localzone
localityName = Localhost
organizationName = Certificate signed by my CA
commonName = localhost.localdomain

[req_ext]
subjectAltName = @alt_names

[v3_req]
subjectAltName = @alt_names

[alt_names]
IP.1 = 127.0.0.1
IP.2 = 127.0.0.2
IP.3 = 127.0.0.3
IP.4 = 192.168.0.1
IP.5 = 192.168.0.2
IP.6 = 192.168.0.3
DNS.1 = localhost
DNS.2 = localhost.localdomain
DNS.3 = dev.local
  1. 生成CA私钥和证书(有效期5年)
openssl req -nodes -new -x509 -keyout CA_key.pem -out CA_cert.pem -days 1825 -config CA.cnf
  1. 生成网络服务器密钥和 CSR
openssl req -sha256 -nodes -newkey rsa:2048 -keyout localhost_key.pem -out localhost.csr -config localhost.cnf
  1. 创建证书并由自己的证书颁发机构签名 (valid 1 year)
openssl x509 -req -days 398 -in localhost.csr -CA CA_cert.pem -CAkey CA_key.pem -CAcreateserial -out localhost_cert.pem -extensions req_ext -extfile localhost.cnf
  1. 利润

输出文件将是:

  • CA.cnf → OpenSSL CA 配置文件。证书创建过程后可能会被删除。
  • CA_cert.pem → [证书颁发机构]证书。必须将此证书添加到浏览器本地授权存储,以信任使用此 CA 创建的所有证书。
  • CA_cert.srl → 随机序号。证书创建过程后可能会被删除。
  • CA_key.pem → 创建新的 [localhost] 证书时必须使用。证书创建过程后可能会被删除(如果您不打算重用它并且CA_cert.pem)。
  • localhost.cnf → OpenSSL SSL 证书配置文件。证书创建过程后可能会被删除。
  • localhost.csr → 证书签名请求。证书创建过程后可能会被删除。
  • localhost_cert.pem → SSL 证书。 必须安装在WEB服务器.
  • localhost_key.pem → 密钥。 必须安装在WEB服务器.

SSL 证书替代名称可以通过

检查
openssl x509 -noout -text -in localhost_cert.pem | grep 'X509v3 Subject Alternative Name' -A 1