为个人网站升级TLS 1.3以及HSTS

2019-01-20  本文已影响0人  bugprogrammer

理论相关

TLS

TLS简介

SSL(Secure Sockets Layer) 安全套接层,是一种安全协议,经历了 SSL 1.0、2.0、3.0 版本后发展成了标准安全协议——TLS (Transport Layer Security) 传输层安全性协议。TLS 有 1.0 (RFC 2246)、1.1(RFC 4346)、1.2(RFC 5246)、1.3(RFC 8446) 版本。

TLS 在实现上分为 记录层 和 握手层 两层,其中握手层又含四个子协议: 握手协议 (handshake protocol)、更改加密规范协议 (change cipher spec protocol)、应用数据协议 (application data protocol) 和警告协议 (alert protocol)。TLS模型图如下。


image

TLS 1.3与TLS 1.2对比

互联网工程任务组(IETF)是负责定义TLS协议的组,该协议经历了多次迭代。先前版本的TLS,TLS 1.2,在RFC 5246中定义, 并且在过去八年中已被大多数Web浏览器使用。在2018年3月21日,经过28次草案后,TLS 1.3已经完成。截至2018年8月,TLS 1.3的最终版本现已发布(RFC 8446)。

Cloudflare等公司已经向其客户提供TLS 1.3。Filippo Valsorda就TLS 1.2和TLS 1.3之间的差异进行了很好的讨论。简而言之,TLS 1.3与TLS 1.2的主要优点是速度更快,安全性更高。

TLS 1.3速度优势

在Web性能方面,TLS和加密连接总是增加了一些开销。HTTP / 2肯定有助于解决这个问题,但TLS 1.3通过TLS错误启动和零往返时间(0-RTT)等功能帮助加速加密连接。

简单地说,使用TLS 1.2,需要两次往返才能完成TLS handshake。使用1.3时,它只需要一次往返, 从而将加密延迟减少一半。这会使这些加密连接感觉比以前更快一点。TLS1.3与TLS1.2握手示意图如下。


image

TLS 1.3浏览器支持

最新版本的Chrome以及FireFox都已经默认支持TLS 1.3,Safari在macOS High Sierra中已经默认支持TLS 1.3。

HSTS

什么是HSTS

HSTS的全称是HTTP Strict-Transport-Security,它是一个Web安全策略机制(web security policy mechanism)。
HSTS最早于2015年被纳入到ThoughtWorks技术雷达,并且在2016年的最新一期技术雷达里,它直接从“评估(Trial)”阶段进入到了“采用(Adopt)”阶段,这意味着ThoughtWorks强烈主张业界积极采用这项安全防御措施,并且ThoughtWorks已经将其应用于自己的项目。

HSTS核心思想

HSTS最为核心的是一个HTTP响应头(HTTP Response Header)。正是它可以让浏览器得知,在接下来的一段时间内,当前域名只能通过HTTPS进行访问,并且在浏览器发现当前连接不安全的情况下,强制拒绝用户的后续访问要求。
HSTS Header的语法如下:
Strict-Transport-Security: <max-age=>[; includeSubDomains][; preload]

升级TLS 1.3以及HSTS教程(服务器操作系统为Debian 4.9.51-1)

TLS 1.3

关闭以及备份现有Nginx

输入如下命令即可(提前将nginx加入path路径):

nginx -s stop && cd /usr/local && mv nginx nginx-bak

下载相关源码以及安装依赖环境

下载以及解压Nginx

wget http://nginx.org/download/nginx-1.15.8.tar.gz && tar -zxvf nginx-1.15.8.tar.gz

下载以及解压OpenSSL

wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz && tar -zxvf openssl-1.1.1a.tar.gz

安装相关依赖

apt install -y build-essential libpcre3 libpcre3-dev zlib1g-dev liblua5.1-dev libluajit-5.1-dev libgeoip-dev google-perftools libgoogle-perftools-dev

为Nginx以及OpenSSL打补丁

OpenSSL

pushd openssl-1.1.1a
curl https://raw.githubusercontent.com/hakasenyang/openssl-patch/master/openssl-equal-1.1.1a_ciphers.patch | patch -p1
curl https://raw.githubusercontent.com/hakasenyang/openssl-patch/master/openssl-1.1.1a-chacha_draft.patch | patch -p1
popd
image

Nginx

pushd nginx-1.15.8
curl https://raw.githubusercontent.com/kn007/patch/d6bd9f7e345a0afc88e050a4dd991a57b7fb39be/nginx.patch | patch -p1
curl https://raw.githubusercontent.com/hakasenyang/openssl-patch/master/nginx_strict-sni.patch | patch -p1
image

编译安装Nginx

使用以下命令生成MakeFile,注意--with-openssl=openssl路径

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-stream --with-stream_ssl_module --with-http_v2_module --with-threads --with-http_v2_hpack_enc --with-http_spdy_module --with-openssl=~/openssl-1.1.1a
image
image

编译以及安装Nginx

输入如下命令即可,如下图即安装成功。

make && make install
image
image

配置Nginx以启用TLS 1.3

输入以下命令,拷贝之前备份的nginx.conf。

cp -f /usr/local/nginx-bak/conf/nginx.conf /usr/local/nginx/conf

输入以下命令打开nginx.conf并按照图示修改即可启用TLS 1.3(注意:去掉所有的ssl on字段,否则会报警告)

nano conf/nginx.conf
image

HSTS

打开nginx.conf并按照图示修改即可启用HSTS

image

测试

输入以下命令,输出如图即可确定nginx.conf文件没有错误

nginx -t
image

启动Nginx,无输出即正常

nginx

登录https://www.ssllabs.com, 输入域名,如下图即支持,说明TLS 1.3以及HSTS升级成功!!!

image
上一篇下一篇

猜你喜欢

热点阅读