Nginx环境配置ssl证书开启https安全加密协议

自然 2019年4月3日23:43:10 评论 211
摘要

很多网站HTTPS检测评分都达到了A或者A+,但在看检测结果的时候,发现类似于百度和淘宝这类大用户群的网站居然没有评级到A或者在使用的加密套件上有橙色的加密套件,这就让我们非常诧异,难道是这些个网站不注重安全么?如果说百度不注重用户的隐私安全,那还能说得过去,毕竟在搜索的时候没啥重要信息。但是淘宝这种电商不应该不会不重视网站的安全性。那又是什么原因让这些网站造成了这种情况呢?通过仔细的观察报告结果和查询资料发现,这些网站这样做的原因是为了更好的兼容性。

前两天有一个网友问我如何为它的oneinstack安装的lnmp环境配置https协议,想了一下5分钟解决了问题。才发现自然没有发现过这方面的教程,今天整理一下发出来,就当是一个笔记。如果有小伙伴不会配置https的可以看一下,咱们一起学习,如果你有更好的建议欢迎留言。

Nginx环境配置ssl证书开启https安全加密协议

证书的获取

现在很多地方都能获得免费的ssl证书,我们所熟知的阿里云、腾讯云、又拍云、七牛云、百度云、Let's Encrypt等等一大批服务商都有提供赛门铁克、亚洲诚信的免费CA证书,赶紧去试试给自己是小站添加一个https吧。

我们从服务商那里获得的sll ca证书包含了crt证书和key密匙两部分,在不同的网站环境下需要不同的格式,可以使用网上免费的转换工具进行格式转换。

这里距离我从服务商那里下载的ssl证书是一个zip压缩包,里面包含www.wanvi.net.crt和www.wanvi.net.key两个文件,这就是我们待会需要用到的证书和密匙文件。

证书的部署

证书的部署实际并不是非常难,我们只需要修改一下conf文件,并重新载入配置即可开启https的环境支持。

第一步我们需要将crt证书文件和key密匙文件上传到服务器上,我们可以用sftp将文件上传到网站目录或者nginx目录都是可以的,这里自然暂且将这两个文件上传到服务器的/usr/local/nginx/conf/ssl/这个文件夹下,方便nginx的调用。

我们查看nginx下虚拟机的conf配置文件,例如自然使用的是oneinstack一键包集成的环境,网站配置文件存储在/usr/local/nginx/conf/vhost/下,文件名为www.wanvi.net.conf。

我们需要在文件中添加如下代码:

  1. listen 443 ssl http2;
  2.   ssl_certificate /usr/local/nginx/conf/ssl/wanvi.net.crt;
  3.   ssl_certificate_key /usr/local/nginx/conf/ssl/wanvi.net.key;
  4.   ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
  5.   ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
  6.   ssl_prefer_server_ciphers on;
  7.   ssl_session_timeout 10m;
  8.   ssl_session_cache builtin:1000 shared:SSL:10m;
  9.   ssl_buffer_size 1400;
  10.   add_header Strict-Transport-Security max-age=15768000;
  11.   ssl_stapling on;
  12.   ssl_stapling_verify on;

 

ssl_certificate 后面跟随的是crt证书文件的绝对路径;

ssl_certificate_key后面跟随的是key密匙文件的绝对路径。

然后我们运行nginx -t检查我们的配置是否正确,这里给各位小伙伴一点建议,那就是修改nginx的相关配置以后不要直接运行service nginx restart重启nginx环境,这有可能造成由于配置文件的错误造成网站瘫痪,如果是业务型网站可能会造成业务暂停运行,这不是一个好习惯。

所以我们要养成良好的习惯,那就是用nginx -t来检查配置是否正确。

提示如下表示我们的配置正确:

  1. [root@izwz9avyv2945ilt432lffz vhost]# nginx -t
  2. nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
  3. nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
  4. [root@izwz9avyv2945ilt432lffz vhost]#

补充说明:

处于对网站的https兼容性与安全性的考虑,我们对服务器所使用的的https加密采用不同的加密套件。ssl_ciphers就是对于加密套件的选择参数。

百度

例如百度等搜索引擎,传输过程并不存在说明重要的文件,所以百度选择了牺牲一定安全性来达到最大的兼容体验:

  1. ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH;
  2. ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;

Nginx环境配置ssl证书开启https安全加密协议

从这里发现哪怕用户使用的是IE6这款老古董级别的浏览器也能访问百度。这样的兼容性可以说是异常良好了。但是安全性就有点欠缺,如果要适配IE6这款浏览器,那么SSL协议就必须得支持SSL2和SSL3,因为IE6支持也仅支持这两个协议,SSL2是明确说明不安全的了,SSL3上又有著名的POODLE漏洞问题,SSL3上的所有CBC加密套件都会受该漏洞影响,除去CBC加密套件,那么就只剩下RC4系列的加密套件了。这个没得选择。

淘宝

对于淘宝这类设计金钱交易的网站,安全性是非常重要的,宁可牺牲一定的兼容性也要保证用户交易的安全可靠,所以淘宝做了一定的套件选择:

  1. ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
  2. ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

Nginx环境配置ssl证书开启https安全加密协议

从图中可以看出淘宝舍弃了SSL3协议,换句话说就是放弃了对IE6的支持,这个从客户端模拟结果上也可以体现出来:

Nginx环境配置ssl证书开启https安全加密协议

自然的选择

处于对安全性和兼容性的选择,自然的配置也很独特,我果断放弃了部分兼容,如果你觉得好也可以借鉴一下:

  1. ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
  2. ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;

总结

HTTPS安全协议是现在网络安全浪潮的趋势,也是大势所趋,这是必然的。未来的网络将是追求安全高效的。自然所在的地方布置运营商还是机房方面对http网站强制插入广告,这让自然非常的不喜欢,真的是投诉无门。所以自然给网站开启https后广告就没那么容易植入了。各位小伙伴何不早日给自己的爱站开启HTTPS小绿标呢?

 

weinxin
网科文媒
快来关注一下,你想要的这里都有喔!
自然

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: