Nginx如何配置HTTPS详解
1. 什么是HTTPS?
HTTPS(全称:Hypertext Transfer Protocol Secure),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS在HTTP的基础下加入SSL,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面 。
1.1 HTTPS好处
- 使用 HTTPS 协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;
- HTTPS 协议是由 SSL+HTTP构建的可进行加密传输、身份认证的网络协议,要比 HTTP安全,可防止数据在传输过程中被窃取、改变,确保数据的完整性。
- HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本;
1.2 HTTPS缺点
- 相同网络环境下,HTTPS 协议会使页面的加载时间延长近 50%,增加10%到20%的耗电。此外,HTTPS 协议还会影响缓存,增加数据开销和功耗
- HTTPS 协议的安全是有范围的,在黑客攻击、拒绝服务攻击和服务器劫持等方面几乎起不到什么作用,最关键的是,SSL证书的信用链体系并不安全。特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行;
- 成本增加。部署HTTPS后,因为HTTPS 协议的工作要增加额外的计算资源消耗,例如 SSL 协议加密算法和 SSL交互次数将占用一定的计算资源和服务器成本。在大规模用户访问应用的场景下,服务器需要频繁地做加密和解密操作,几乎每一个字节都需要做加解密,这就产生了服务器成本。随着云计算技术的发展,数据中心部署的服务器使用成本在规模增加后逐步下降,相对于用户访问的安全提升,其投入成本已经下降到可接受程度。
2. Nginx配置HTTPS
2.1 申请SSL证书
可以去申请阿里云免费CA证书 https://www.aliyun.com/product/cas
腾讯云: https://cloud.tencent.com/product/ssl
2.2 申请腾讯云免费证书
这里已经提前申请下来了。直接在腾讯云下载即可。
2.3 在服务器端解压
[root@haitang-nginx-test tls]# ls
nginx.malusspectabilis.top_nginx.zip
[root@haitang-nginx-test tls]# unzip nginx.malusspectabilis.top_nginx.zip
Archive: nginx.malusspectabilis.top_nginx.zip
creating: nginx.malusspectabilis.top_nginx/
inflating: nginx.malusspectabilis.top_nginx/nginx.malusspectabilis.top.csr
inflating: nginx.malusspectabilis.top_nginx/nginx.malusspectabilis.top_bundle.crt
inflating: nginx.malusspectabilis.top_nginx/nginx.malusspectabilis.top_bundle.pem
inflating: nginx.malusspectabilis.top_nginx/nginx.malusspectabilis.top.key
2.4 配置HTTPS
具体可参考官方文档;https://nginx.org/en/docs/http/ngx_http_ssl_module.html
配置https功能基于模块ngx_http_ssl_module,编译安装需安装这个模块开启ssl功能。yum安装的nginx默认是开启这个模块ngx_http_ssl_module。
[root@haitang-nginx-test conf.d]# cat haitang-https.conf
server{
listen 443 ssl; 是否启用ssl功能
charset utf-8; 字符集utf-8
server_name nginx.malusspectabilis.top; 域名
ssl_session_timeout 5m; 客户端连接可复用ssl 缓存有效时间
ssl_certificate /apps/nginx/conf.d/tls/nginx-malusspectabilis.top/nginx.malusspectabilis.top_bundle.pem; 当前虚拟主机的CA证书信息,一般是Crt文件
ssl_certificate_key /apps/nginx/conf.d/tls/nginx-malusspectabilis.top/nginx.malusspectabilis.top.key; 当前虚拟主机的私钥文件,一般为key文件
ssl_session_cache shared:sslcache:20m; 配置ssl缓存
ssl_protocols TLSv1.2 TLSv1.3; 支持的ssl协议版本,早期为ssl现在为tls;
location / {
root "/data/nginx/html/haitang/";
}
}
语法检查正常。
[root@haitang-nginx-test conf.d]# nginx -t
nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /apps/nginx/conf/nginx.conf test is successful
2.5 准备访问页面
[root@haitang-nginx-test ~]# echo "海棠" > /data/nginx/html/haitang/index.html
2.6 加载Nginx并检查端口是否启动
[root@haitang-nginx-test ~]# nginx -s reload
[root@haitang-nginx-test conf.d]# ss -tnlp | grep 443
LISTEN 0 128 *:443 *:* users:(("nginx",pid=1802,fd=7),("nginx",pid=1801,fd=7),("nginx",pid=1800,fd=7),("nginx",pid=1799,fd=7),("nginx",pid=1798,fd=7),("nginx",pid=1761,fd=7))
2.7 配置本地hosts解析
sh-3.2# echo "xxxxxxx nginx.malusspectabilis.top" >> /etc/hosts
2.8 测试是否是https访问
我们一直奔跑在进步的旅途