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首页,选择网站使用的服务器和操作系统,如下图:

image-20200308152759977

Nginx+Ubuntu

“Let's Encrypt”的图片搜索结果

  1. 添加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
    
  2. 安装Cerbot
    sudo apt-get install certbot python-certbot-nginx
    
  3. 运行Certbot
    • 获取并安装证书

      sudo certbot --nginx
      

      此命令Certbot自动编辑Nginx配置并为其提供HTTPS服务。

    • 获取证书

      sudo certbot certonly --nginx
      

      如果希望手动编辑Nginx配置,此命令只获取证书。

  4. 测试自动续订

    Certbot软件包带有cron作业或systemd计时器,它们将在证书过期之前自动更新证书。可以通过运行以下命令来测试证书的自动续订:

    sudo certbot renew --dry-run
    
  5. 安全测试和评测

    推荐使用以下在线服务来检测站点 HTTPS 配置:

    测试地址:https://www.ssllabs.com/ssltest/,以下是本博客测试结果截图:

    image-20200308160805645

在线申请

在线申请网站(英文):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

编译安装OpenSSL

修改/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