使用 letsencrypt 生成 SSL 证书开启 HTTPS

HTTP 和 HTTPS 是什么?

  HTTP 是一个传输网页内容的协议,比如你看到的 http 开头的网站 http://yun.pfan123.com,其网页上的文字、图片、CSS、JS 等文件都是通过 http 协议传输到我们浏览器的。

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

SSL/TLS 是什么?

SSL是一个介于HTTP协议与TCP之间的一个可选层,其位置大致如下:

svg基本形状

  • SSL:(Secure Socket Layer,安全套接字层),为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取。当前版本为3.0,它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。
    SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

  • TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。
    TLS 1.0是IETF(Internet Engineering Task Force,Internet工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本,可以理解为SSL 3.1,它是写入了 RFC 的。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。较低的层为 TLS 记录协议,位于某个可靠的传输协议(例如 TCP)上面。

SSL/TLS协议提供的服务主要有:

  • 1.认证用户和服务器,确保数据发送到正确的客户机和服务器;
  • 2.加密数据以防止数据中途被窃取;
  • 3.维护数据的完整性,确保数据在传输过程中不被改变。

HTTPS与HTTP的一些区别

1.HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费,免费的推荐可以使用 letsencrypt
2.HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密的。
3.HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4.HTTPS可以有效的防止运营商劫持,解决了防劫持的一个大问题。

如何HTTPS部署改造

一个网站要全站由HTTP替换成HTTPS,可能需要关注以下几点:

  • 1.安装CA证书,一般的证书都是需要收费的,这边推荐一个比较好的购买证书网站:1)Let’s Encrypt,免费,快捷,支持多域名(不是通配符),三条命令即时签署+导出证书。2)Comodo PositiveSSL,收费,但是比较稳定。
  • 2.在购买证书之后,在证书提供的网站上配置自己的域名,将证书下载下来之后,配置自己的web服务器,同时进行代码改造。
  • 3.HTTPS 降低用户访问速度。SSL握手,HTTPS 对速度会有一定程度的降低,但是只要经过合理优化和部署,HTTPS 对速度的影响完全可以接受。在很多场景下,HTTPS 速度完全不逊于 HTTP,如果使用 SPDY,HTTPS 的速度甚至还要比 HTTP 快。
  • 4.相对于HTTPS降低访问速度,其实更需要关心的是服务器端的CPU压力,HTTPS中大量的密钥算法计算,会消耗大量的CPU资源,只有足够的优化,HTTPS 的机器成本才不会明显增加。

Let’s Encrypt 介绍

Let’s Encrypt 是一个免费、开放,自动化的证书颁发机构,由 ISRG(Internet Security Research Group)运作。

ISRG 是一个关注网络安全的公益组织,其赞助商从非商业组织到财富100强公司都有,包括 Mozilla、Akamai、Cisco、Facebook,密歇根大学等等。ISRG 以消除资金,技术领域的障碍,全面推进加密连接成为互联网标配为自己的使命。

申请 Let’s Encrypt 证书不但免费,还非常简单,虽然每次只有 90 天的有效期,但可以通过certbot脚本定期更新, Let’s Encrypt有了certbot自动化工具,配置管理起来非常容易。

 certbot生成证书

1.下载安装 certbot

1
2
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto

 certbot生成证书

2.获取CA申请证书

1
./certbot-auto certonly

 certbot生成证书

3.查看 fullchain.pemprivkey.pem, 配置nginx

查看 etc/letsencrypt/live/[DOMAIN]/, 发现含有 fullchain.pemprivkey.pem ,然后配置 nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
server {

listen 443 ssl;

server_name yun.pfan123.com;

ssl_certificate /etc/letsencrypt/live/yun.pfan123.com/fullchain.pem;

ssl_certificate_key /etc/letsencrypt/live/yun.pfan123.com/privkey.pem;

ssl_dhparam /etc/ssl/certs/dhparams.pem;

ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';

ssl_prefer_server_ciphers on;

……

}

4.配置 http 强制跳转到 https:

1
2
3
4
5
6
7
8
9
server {

listen 80;

server_name www.saxieyu.com;

return 301 https://$server_name$request_uri;

}

5.验证服务器证书

如上修改过 nginx 配置,并 reload 过 nginx 服务后,使用浏览器访问 https://yun.pfan123.com,验证服务器证书是否正确生效。

也可以使用 ssllabs 在线测试服务器证书强度及配置正确性.

6.letsencrypt 证书更新

1
certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"

cron 自动更新

1
30 2 15 * * /root/ssl/certbot-auto renew >> /var/log/le-renew.log

参考资料:

certbot

certbot github

letsencrypt docs