Home - 1990bingliu/https_create GitHub Wiki
Windown 下Nginx配置https服务器
使用 OpenSSL 制作一个包含 SAN(Subject Alternative Name)的,加密方式为sha256的证书 参考
- 安装OpenSSL
- step.1 下载安装
Download OpenSSL,安装到
C:\openssl-win
- step.32 配置环境变量
新增变量名
OPENSSL_HOME
,变量值C:\openssl-win\bin;
,打到Path变量,并在Path变量结尾添加一条: %OPENSSL_HOME%
- 配置openssl.cnf文件(如需要实现配置包多个域名的CSR,则该配置为必须的) *. 修改openssl.cnf
# dir目录为CA证的管理存放目录,该目录必须存在,且目录下应有:certs目录,crl目录,newcerts目录,
# private目录,及index.txt文件,serial文件(内容为00)
[ CA_default ]
dir= D:/CA Where everything is kept
certs = $dir/certs # Where the issued certs are kept
crl_dir = $dir/crl # Where the issued crl are kept
database = $dir/index.txt # database index file.
#unique_subject = no # Set to 'no' to allow creation of
# several ctificates with same subject.
new_certs_dir = $dir/newcerts # default place for new certs.
certificate = $dir/cacert.pem # The CA certificate
serial = $dir/serial # The current serial number
crlnumber = $dir/crlnumber # the current crl number
# must be commented out to leave a V1 CRL
# 确保req下存在以下2行(默认第一行是有的,第2行被注释了)
[ req ]
distinguished_name = req_distinguished_name
req_extensions = v3_req
# 确保req_distinguished_name下没有 0.xxx 的标签,有的话把0.xxx的0. 去掉
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = CN
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = ShangHai
localityName = Locality Name (eg, city)
localityName_default = ShangHai
organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = Domain Control Validated
commonName = Internet Widgits Ltd
commonName_max = 64
# 新增最后一行内容 subjectAltName = @alt_names(前2行默认存在)
[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
# 新增 alt_names,注意括号前后的空格,DNS.x 的数量可以自己加
[ alt_names ]
DNS.1 = abc.example.com
DNS.2 = dfe.example.org
DNS.3 = ex.abcexpale.net
DNS.4 = *.example.com
IP.1 = 192.168.8.222
IP.2 = 192.168.8.111
- 创建CA证书管理目录
[root@localhost]#mkdir -p CA/{certs,crl,newcerts,private}
[root@localhost]# touch CA/index.txt
[root@localhost]#echo 00 > CA/serial
注意,CA的以上文件及目录是必须的,如没有,则自己创建,创建后,需要在openssl.cnf的 [ca_default] 下修改dir配置
- 生成CA自签署证书
- step.0 进入目录
d:\test_ssl
- step.1 创建私钥
openssl genrsa -des3 -out ca.key 2048
输入密码后,再次重复输入确认密码。记住此密码,后面会用到。(注意:[-des3]指定后,该ca.key文件将加密存放,当需要使用该密钥,则需要输入密码方可使用。如需要明文存放该密钥(可用计事本直接打开查看),省略该选项即可。)
- step.2 创建csr
openssl req -new -key ca.key -out ca.csr
提示出错:Unable to load config info from /usr/local/ssl/openssl.cnf 则在安装目录下找到share\openssl.cnf文件,在cmd中,输入 `set OPENSSL_CONF=C:\openssl-win\share\openssl.cnf` ,重新再输入生成csr证书指令.
注意Common Name <eg.YOUR name> []:localhost,需要与配置的服务器名ServerName一至,否则启动apache或nginx时会报错
,其它可随意或不填写
openssl req -text -noout -in ca.csr
查看csr文件
- step.3 去除密码
在加载SSL支持的Nginx并使用上述私钥时除去必须的口令,否则会在启动nginx的时候需要输入密码。
复制ca.key并重命名为ca.key.org。
在命令行中执行如下命令以去除口令:
openssl rsa -in ca.key.org -out ca.key
然后输入密码,这个密码就是上文中在创建私钥的时候输入的密码。
- step.4 生成自签root证书(默认是SHA-1加密的,这里用sha256,Chrome16年后已对SHA-1证书标记为“无效HTTPS”)
openssl x509 -req -days 365 -in ca.csr -signkey ca.key -sha256 -out ca.crt
openssl x509 -text -noout -in ca.crt
查看crt文件
- 创建服务端SSL证书(带“使用者备用名称”的证书,即签署带有 SAN 扩展)
- step.1 创建server.key
openssl genrsa -out server.key 2048
- step.2 创建多域名的server.csr文件
openssl req -new -key server.key -out server.csr
- step.3 创建server.crt,使用自签CA根证书签署带SAN扩展的SSL证书
openssl ca -in server.csr -md sha256 -out server.crt -cert ca.crt -keyfile ca.key -extensions v3_req -config "/etc/ssl/openssl.cnf"
输入两次y后,即可
- 注意这里有坑 ** 创建csr文件时,信息必须写全 ** common name 视乎必须为域名格式,ip格式有的浏览器不承认 ** csr的信息需要与ca的证书信息相匹配(如地区、企业等,如需要设置成不匹配,则需要设置openssl.cnf链接)
- 修改nginx conf
server {
listen 443 ssl;
server_name localhost;
ssl_certificate d://test_ssl//server.crt; # 这个是证书的crt文件所在目录
ssl_certificate_key d://test_ssl//server.key; # 这个是证书key文件所在目录
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html; # 这个是指定一个项目所在目录
index index.html index.htm; # 这个是指定首页的文件名
}
}
SHA-256证书创建
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout ca.key -out ca.crt