Nginx如何配置HTTPS详解

时间:2022-02-22 00:46:44

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 申请腾讯云免费证书

这里已经提前申请下来了。直接在腾讯云下载即可。
Nginx如何配置HTTPS详解

Nginx如何配置HTTPS详解

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访问

Nginx如何配置HTTPS详解
Nginx如何配置HTTPS详解