配置https
https功能由ngx_http_ssl_module模块提供。https连接的认证过程见SSL握手机制。简单版的过程如下:
一,客户端say hello,并发送一个随机数给服务端。
二,服务端say hello,并回复一个随机数给客户端。
三,服务端发送数字证书给客户端。
四,客户端使用信任的CA公钥解密数字证书得到服务端的公钥。
五,客户端使用服务端的公钥加密一个预备主密钥并发送给服务端。
六,服务端使用自己的私钥解密预备主密钥。
七,双方都得到了2个随机数加一个预备主密钥。通过这3个随机数形成一个会话主密钥,即session key。至此ssl握手结束,连接的认证过程也完毕。
对于服务端而言,在配置https时,需要提供自己的数字证书用于发送给客户端,还要提供自己的私钥用于解密客户端发送的预备主密钥。当ssl连接建立完成后,后续连接要传输的数据都采用session key进行加密,但注意session key是对称加密,客户端和服务端是一样的。
还需注意,在创建证书请求时,由于需要指定common name,这是需要使用https的站点,因此每个ssl证书只能为一个server_name提供https服务。不过,通过特殊的配置方法,也能让一个ssl证书服务于整个域名或域名内的某些主机。例如,https://www.baidu.com使用的证书就是颁发给"baidu.com"的,而不是该域名下的某一台主机。如何实现这样的功能,可以网上搜索下关键字"ssl SubjectAltName",若有需要,我会另开一篇文章介绍实现方法。
以下是配置文件中默认的关于SSL相关的指令设置。
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.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;
# }
#}
以下是建立https的相关过程:
- 自建CA。
cd /etc/pki/CA (umask 077;openssl genrsa -out private/cakey.pem 2048) openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650
- 建立相关序列和索引文件。
touch index.txt echo "01" > serial
- nginx端生成证书请求。
(umask 077;openssl genrsa -out /usr/local/nginx/longshuai.key 2048)
openssl req -new -key /usr/local/nginx/longshuai.key -out /usr/local/nginx/longshuai.csr
- CA为证书请求颁发证书。
openssl ca -in /usr/local/nginx/longshuai.csr -out longshuai.crt
- 将颁发的证书发送给nginx端。这里由于CA和nginx在同一主机上,所以直接移动即可。
此时,在/usr/local/nginx/目录下就有了nginx自己的私钥文件和证书文件。mv longshuai.crt /usr/local/nginx/
[root@xuexi nginx]# ls longshuai*
longshuai.crt longshuai.csr longshuai.key
-
修改配置文件,配置ssl相关选项。
server {
listen 443 ssl; server_name www.longshuai.com; ssl_certificate /usr/local/nginx/longshuai.crt; ssl_certificate_key /usr/local/nginx/longshuai.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; } }
- 重载配置文件。
- 测试。在浏览器上输入
https://www.longshuai.com
测试。将会提示证书安全存在问题,说明配置成功。以后只要在客户端安装证书即可正常访问。测试时,建议使用IE浏览器或使用IE内核的浏览器测试,这样比较直观。使用firefox、chrome等浏览器可能会因为是自建的CA而出现一些问题。
来源:oschina
链接:https://my.oschina.net/u/4135913/blog/3210035