徐高翔的个人网站

Let’s Encrypt, 让你的网站拥抱HTTPS

2018-07-25

软硬件环境

  • ubuntu 16.04 server on vps
  • certbot

简介

本站之前在hostpark托管时, 由于 hostpark 本身提供了 https 的良好支持, 所以这块就没怎么去研究. 现在站点搭在了vps上, 再裸奔就不好了, 因此趁着这个机会, 查找了相关的资料, 把这块空缺给补上, 也让站点更加安全, 让访问者更加的放心.

先来看看设置前后的区别, 浏览器中URL的输入框

https_ssl_03

https_ssl_04

HTTP vs HTTPS

http 是一个传输网页内容的协议, 网站上的文字、图片、CSS、JS脚本等文件都是通过 http 协议传输到我们的浏览器, 通过浏览器的解析渲染, 才使我们看到精彩丰富的内容。但是 http 是明文传输的, 内容很容易被篡改, 很不安全.

https 的出现就是为了解决这样的问题, 它在 http 协议的基础上增加了一层 SSL/TLS 安全协议. 协议本身比较复杂, 可以简单的理解为SSL(Secure Sockets Layer)TLS(Transport Layer Security) 是一个东西的不同阶段, 总之是特别安全就行了.

部署HTTPS需要什么

只需要有一张被信任的 CA(Certificate Authority) , 也就是 SSL 安全证书, 这个必须是证书授权中心颁发的. 理论上我们自己也可以签发 SSL 证书, 但是这个证书, 肯定不会被主流浏览器所信任. 一般的 SSL 安全证书签发服务都比较贵, 如Godaddy 的, 一年的费用超过20美刀, 像我等穷人, 只能另谋它路.

幸运的是, EEF(Electronic Frontier Foundation) 、Mozilla基金会和美国密歇根大学成立了一个公益组织 ISRG(Internet Security Research Group) , 他们从2015年开始推出了 Let’s Encrypt 免费证书, 这个免费证书不仅免费,而且还相当好用, 我们就通过它来拥抱 HTTPS.

实践

登录站点 https://certbot.eff.org/, 根据你的服务器的情况进行下拉选择, 这是一个安装向导, 它会智能的根据你的输入, 来给出相应的安装指令. 我使用的是 ubuntu 16.04 操作系统和 tomcat 服务器

https_ssl_05

1
2
3
4
5
$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install certbot

安装完毕后执行

1
certbot certonly

然后出现一堆选择项, 根据实际情况填写就好了

https_ssl_01

https_ssl_02

相关的文件都默认存在与/etc/letsencrypt下

证书的更新

最简单的方法,执行

1
certbot renew --quiet

默认情况下, 证书只有90天的有效期, 感谢xdtianyu, 这里有更新证书的详细方法.

nginx 和 tomcat的配置

我这里的环境是nginx + tomcat, nginx 是通过 sudo apt-get install nginx 安装,tomcat 是下载的zip安装包

修改/etc/nginx/sites-available/default
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
server {
listen 80;

server_name xugaoxiang.com;

return 301 https://$host$request_uri;

}

server {
listen 443 ssl;
server_name xugaoxiang.com,localhost;

ssl on;
index index.jsp index.html index.htm;

ssl_certificate /etc/letsencrypt/live/xugaoxiang.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/xugaoxiang.com/privkey.pem;
#ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;

location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;

proxy_pass http://127.0.0.1:8888;
proxy_redirect http://127.0.0.1:8888 https://xugaoxiang.com;
}
}
tomcat的配置

修改server.xml, 主要是修改端口,与 nginx 里的 proxy_pass 匹配起来就可以了

1
2
3
<Connector port="8888" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>

参考资料

  1. https://letsencrypt.org/
  2. https://certbot.eff.org/
  3. https://github.com/xdtianyu/scripts/tree/master/lets-encrypt

本文链接 [https://xugaoxiang.com/2018/07/25/Let’s Encrypt, 让你的网站拥抱HTTPS/](https://xugaoxiang.com/2018/07/25/Let’s Encrypt, 让你的网站拥抱HTTPS/)

推荐文章(由hexo文章推荐插件驱动)

使用支付宝打赏
使用微信打赏

请博主喝咖啡!