Nginx配置网站https服务

本文介绍了如何使用Nginx配置你的站点的https服务。

1. https基础

1.1 http

http协议是一种应用层的协议,协议本身没有做加密措施,所有信息都是用明文传播,因此就会有一些风险:

窃听风险(eavesdropping):第三方可以获知通信内容。
篡改风险(tampering):第三方可以修改通信内容。
冒充风险(pretending):第三方可以冒充他人身份参与通信。by阮一峰

我用白话翻译一下就是:我登陆的网址并不能保证是我想要登陆的网址,即你登录的网址假如被第三方篡改或者监听、或者第三方冒充时你都不知道,所以就会带来一系列的风险。

1.2 https和SSL/TLS

SSL(Secure Sockets Layer)协议是网景公司设计的,就是为了解决上述Web传输的安全问题,后来IETF就把SSL标准化。标准化之后的名称改为TLS(Transport Layer Security),因此后续我们就把两者并称。

SSL/TLS协议使用 公钥加密算法,即使用公钥加码,私钥解密的方式。对应到实际的Web传输过程就是:用户客户端向服务器请求公钥,然后用公钥加密信息成密文,服务端收到密文后用私钥解密。SSL将公钥放在数字证书中,只要证书是可信任的,则公钥就是可信任的。下一部分就介绍了获取数字证书的过程,你可以逐步地创建自己网站的数字证书!

2. 获取证书

2.1 个人配置

首先需要安装 openssl,利用openssl命令可以生成私钥文件XXX.key和证书请求文件XXX.csr。

生成密钥/证书文件:

1
2
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout XXX.key -out XXX.crt

按照提示输入信息和密码即可!后面配置Nginx的Https服务的时候需要本步骤生成的XXX.crt和XXX.key文件。

个人加密的CA证书目前不受Chrome等主流浏览器的认可,会提示给用户安全问题,因此不建议使用个人生成的CA证书!

2.2 第三方服务

2.2.1 腾讯云/阿里云

可以直接在 腾讯云 或者 阿里云 上购买为期一年的Symantec个人DV SSL证书。

注:个人用户推荐用此方式申请证书!

2.2.2 startssl

美国的SSL服务商 startssl,不过由于安全问题,chrome、safari等主流浏览器均不再信任其数字证书,所以不推荐该SSL服务商。

3. 集成到Nginx

现在假设你已经通过上述手段得到了密钥文件XXX.key和证书文件XXX.crt,这一步就要进入到Nginx的配置中。

首先,打开nginx.cnf文件,在server模块里加入以下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
listen       443 ssl;
server_name localhost;
root /etc/nginx/data/XXX;
ssl on;
ssl_certificate /root/security/XXX.crt;
ssl_certificate_key /root/security/XXX.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
access_log on;
proxy_pass http://offernews;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
}

这样就加上了你的crt文件和key文件,之后重启Nginx即可:

1
2
service nginx stop
service nginx start

以上内容就是关于Nginx配置网站https服务的全部内容了,谢谢你阅读到了这里!

Author:zhaoyh