按照[1]中的方式生成的证书为V1证书,适用于以下情况:(1) 已有域名,在域名注册商处配置了域名解析,可以解析到服务器的IP地址;(2) 修改了系统的hosts,添加了对应规则,如:
1.14.5.14 your.domain.name
无域名、使用IP地址访问的站点,配置https时需要V3证书。配置了正确签名的V3证书的站点,在导入了root CA的机器上访问时,效果应如下图所示:
创建根 CA 证书
使用 OpenSSL 创建根 CA 证书。
创建根密钥
登录到安装了OpenSSL的计算机并运行以下命令。 这会创建加密密钥。
openssl ecparam -out contoso.key -name prime256v1 -genkey
创建根证书并进行自签名
使用以下命令生成证书签名请求 (CSR)。
openssl req -new -sha256 -key contoso.key -out contoso.csr
出现提示时,请键入根密钥的密码,以及自定义CA的组织信息,例如国家/地区、省/市/自治区、组织、组织单位和完全限定的域名(颁发者的域)。
创建根证书
使用以下命令生成根证书。
openssl x509 -req -sha256 -days 36500 -in contoso.csr -signkey contoso.key -out contoso.crt
上述命令将创建根证书。 稍后你将使用此证书来为服务器证书签名。
创建服务器证书
接下来,使用OpenSSL创建服务器证书。
创建证书的密钥
使用以下命令生成服务器证书的密钥。
openssl ecparam -out 1.14.5.14.key -name prime256v1 -genkey
创建 CSR(证书签名请求)
CSR是请求证书时向CA提供的公钥。CA将针对此特定请求颁发证书。
使用以下命令生成 CSR:
openssl req -new -sha256 -key 1.14.5.14.key -out 1.14.5.14.csr
出现提示时,请键入根密钥的密码,以及自定义CA的组织信息:国家/地区、省/市/自治区、组织、组织单位和完全限定的域名。 这是网站的域,它应该不同于颁发者,如:
Subject: C = CN, ST = Jiangsu, L = Xuzhou, O = FantasyShawTest, OU = FantasyShawTest, CN = fantasyshawtest, emailAddress = example@gmail.com
准备openssl.cnf
和v3.ext
同级目录下新建openssl.cnf
并写入以下内容:
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
[req_distinguished_name]
countryName = Country Name (2 letter code)
countryName_default = US
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = NY
localityName = Locality Name (eg, city)
localityName_default = NYC
organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = xxx
commonName = xxx
commonName_max = 64
[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:TRUE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
IP.1 = 1.14.5.14
IP.2 = 19.19.8.10
同级目录下新建v3.ext
并写入以下内容:
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage=digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName=@alt_names
[alt_names]
IP.1 = 1.14.5.14
IP.2 = 19.19.8.10
两个文件的[alt_names]
应为服务器的IP,且应相同。
生成V3证书,并使用CA的根密钥为该证书签名
openssl x509 -req -in 1.14.5.14.csr -CA contoso.crt -CAkey contoso.key -CAcreateserial -out 1.14.5.14.crt -days 36500 -sha256 -extfile v3.ext
验证证书内容
openssl x509 -in 1.14.5.14.crt -text -noout
在Windows上信任root CA
双击contoso.crt
安装root CA,存储到受信任的根证书颁发机构。
Nginx配置反向代理和SSL示例
server {
listen 443 ssl default;
ssl_certificate /home/mycert/1.14.5.14.crt;
ssl_certificate_key /home/mycert/1.14.5.14.key;
location /{
client_max_body_size 1024m;
proxy_pass http://localhost:5212;
}
}
访问页面验证效果
References
[1] 使用自定义根 CA 生成自签名证书 - Azure Application Gateway | Microsoft Learn
Comments NOTHING