NGINX设置HTTPS
孙霸天 人气:1背景
HTTP
超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。
优点
- 支持客户/服务器模式
- 简单快速:服务器当客户端请求服务时,只需传送请求方法和路径
- 灵活: HTTP 允许任何类型的数据对象的传输
- 无连接:限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
- 无状态:协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息。HTTP 是一个无状态协议,这意味着每个请求都是独立的,Keep-Alive 没能改变这个结果。
缺点
- HTTP协议传输数据,都是通过明文的方式在互联网上传递(如账号、密码、身份信息、浏览器记录和交易记录)
- 任何人都可以轻松拦截、窃取或篡改数据,可能造成你的隐私数据泄露(中间人攻击)
HTTPS
HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 [1] 。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面 。
原理图如下:
简单来说,https是在http的基础上添加了证书来验证安全性,客户端拿到了https的证书会向证书服务器去验证证书的真伪,这样就可避免中间人攻击。在向证书服务器验证证书后,客户端就能拿到服务器的公钥,同时客户端也会生成这次自己的私钥和公钥,在请求传输的过程中会使用服务器公钥将数据和客户端公钥进行加密,这种加密是非对称加密的(很难破解),服务器拥有私钥可以将数据进行解密。服务器返回数据时会使用客户端的公钥进行加密,这样只有客户端才能使用私钥解密数据。这个过程是安全的。
配置过程
这里我使用的是nginx服务器配置域名htpps(配置SSL证书)
域名证书申请
我是使用腾讯云购买的域名:sunbt.ltd
国内服务器使用域名时需要备案,这里我默认都已经备案
进入腾讯的SSL证书管理页面,申请对应的域名证书
下载对应的证书,这里我选择NGINX版本的
编辑nginx.conf文件
将证书解压放到服务器对应位置上
添加如下内容:
server { #SSL 访问端口号为 443 listen 443 ssl; #填写绑定证书的域名 server_name www.sunbt.ltd; #证书文件名称 ssl_certificate /usr/local/nginx/conf/ssl/www.sunbt.ltd_bundle.crt; #私钥文件名称 ssl_certificate_key /usr/local/nginx/conf/ssl/www.sunbt.ltd.key; ssl_session_timeout 5m; #请按照以下协议配置 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; location @router { rewrite ^.*$ /index.html last; } location / { root /usr/local/nginx/html/web/blog; # /vue/dist/ 打包后的dist目录 try_files $uri $uri/ @router; # 指向下面的 @router否则会出现 404 index index.html index.htm; } }
让http请求跳转到https
修改配置如下:
server { listen 80; #填写绑定证书的域名 server_name cloud.tencent.com; #把http的域名请求转成https return 301 https://$host$request_uri; }
加载全部内容