使用免费SSL/TLS证书
SSL/TLS证书用于加密HTTP协议,也就是HTTPS。
SSL/TLS
传输层安全性协议(英语:Transport Layer Security,缩写:TLS)及其前身安全套接层(英语:Secure Sockets Layer,缩写:SSL)是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。网景公司(Netscape)在1994年推出首版网页浏览器-网景导航者时,推出HTTPS协议,以SSL进行加密,这是SSL的起源。IETF对SSL进行标准化,1999年公布第一版TLS标准文件,随后又公布RFC 5246 (2008年8月)与 RFC 6176 (2011年3月)。
2014年10月,Google在SSL 3.0中发现设计缺陷,建议禁用此协议。攻击者可以向TLS发送虚假错误提示,然后将安全连接强行降级到过时且不安全的SSL 3.0,然后就可以利用其中的设计漏洞窃取敏感信息。Google在自己公司相关产品中陆续禁止回溯兼容,强制使用TLS协议。Mozilla也在11月25日发布的Firefox 34中彻底禁用了SSL 3.0。微软同样发出了安全通告。
协议 | 发布时间 | 状态 |
---|---|---|
SSL 1.0 | 未公布 | 未公布 |
SSL 2.0 | 1995年 | 已于2011年弃用 |
SSL 3.0 | 1996年 | 已于2015年弃用 |
TLS 1.0 | 1999年 | 计划于2020年弃用 |
TLS 1.1 | 2006年 | 计划于2020年弃用 |
TLS 1.2 | 2008年 | |
TLS 1.3 | 2018年 |
Let’s Encrypt
Let’s Encrypt 是一家免费、开放、自动化的证书颁发机构(CA),由互联网安全研究小组(ISRG)提供服务。主要赞助商包括电子前哨基金会、Mozilla基金会、Akamai以及思科。2015年4月9日,ISRG与Linux基金会宣布合作。目前Let’s Encrypt是使用范围最广泛的免费数字证书,Let’s Encrypt 发行的数字证书有效期只有 3 个月,可以通过定时任务来自动续期。
ACME客户端
Let’s Encrypt 使用 ACME 协议来验证您对给定域名的控制权并向您颁发证书。要获得 Let’s Encrypt 证书,您需要选择一个要使用的 ACME 客户端软件。
官方推荐客户端:Certbot,它既可以为您获取证书,也可以帮助您安装证书。它易于使用,适用于许多操作系统,并且具有出色的文档,关键是能提供定时任务自动续期。
打开Certbot首页,选择网站使用的服务器和操作系统,如下图:
Nginx+Ubuntu
-
添加Certbot PPA
sudo apt-get update sudo apt-get install software-properties-common sudo add-apt-repository universe sudo add-apt-repository ppa:certbot/certbot sudo apt-get update
-
安装Cerbot
sudo apt-get install certbot python-certbot-nginx
-
运行Certbot
-
获取并安装证书
sudo certbot --nginx
此命令Certbot自动编辑Nginx配置并为其提供HTTPS服务。
-
获取证书
sudo certbot certonly --nginx
如果希望手动编辑Nginx配置,此命令只获取证书。
-
-
测试自动续订
Certbot软件包带有cron作业或systemd计时器,它们将在证书过期之前自动更新证书。可以通过运行以下命令来测试证书的自动续订:
sudo certbot renew --dry-run
-
安全测试和评测
推荐使用以下在线服务来检测站点 HTTPS 配置:
测试地址:https://www.ssllabs.com/ssltest/,以下是本博客测试结果截图:
在线申请免费证书网址
在线申请网站(英文):https://www.sslforfree.com/
在线申请网站(中文):https://freessl.cn/
关闭TLS 1.0/TLS 1.1
TLS 1.0/TLS 1.1已经进入弃用阶段,查看Nginx配置
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/jiangleaf.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/jiangleaf.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
修改/etc/letsencrypt/options-ssl-nginx.conf
ssl_session_cache shared:le_nginx_SSL:1m;
ssl_session_timeout 1440m;
ssl_protocols TLSv1.2; #去掉TLSv1.0 TLSv1.1
ssl_prefer_server_ciphers on;
重启服务
nginx -s reload
开启TLS 1.3
为了支持 TLS 1.3 ,需要使用 OpenSSL 1.1.1 ,查看Nginx使用的OpenSSL版本
openssl version
修改/etc/letsencrypt/options-ssl-nginx.conf
ssl_session_cache shared:le_nginx_SSL:1m;
ssl_session_timeout 1440m;
ssl_protocols TLSv1.2 TLSv1.3; #添加TLSv1.3
ssl_prefer_server_ciphers on;
重启服务
nginx -s reload