Let’s Encrypt 使用教程(网站上HTTPS 免费SSL证书 自动更新)

这篇文章主要讲的就是如何让自己的网站免费从HTTP升级为HTTPS,使用的是 Let’s Encrypt的证书。实际上也就是一个Let’s Encrypt 免费证书获取教程 。 为什么要上HTTPS,说一个小故事。

从前有个网站,后来有个广告,没了

作为一个博客,自然不想让在被别人浏览的时候,出现莫名的广告(运营商劫持)。这时候,HTTPS的价值就体现出来了。 HTTPS的好处还有很多,但单单这一条,就够我花心思去升级了。 (其实主要目的是提升网站Biger :)

Let’s Encrypt 简介

如果要启用HTTPS,我们就需要从证书授权机构(以下简称CA) 处获取一个证书,Let’s Encrypt 就是一个 CA。我们可以从 Let’s Encrypt 获得网站域名的免费的证书。这篇文章也主要讲的是通过 Let’s Encrypt + Nginx 来让网站升级到HTTPS。

Certbot 简介

Certbot 是Let’s Encrypt官方推荐的获取证书的客户端,可以帮我们获取免费的Let’s Encrypt 证书。Certbot 是支持所有 Unix 内核的操作系统的,个人博客的服务器系统是CentOS 7,这篇教程也是通过在个人博客上启用HTTPS的基础上完成的。

获取免费证书

  1. 安装Certbot客户端
    yum install certbot
    
  2. 获取证书
    certbot certonly --webroot -w /var/www/example -d example.com -d www.example.com
    

    这个命令会为 example.com 和 www.example.com 这两个域名生成一个证书,使用 --webroot 模式会在 /var/www/example 中创建 .well-known 文件夹,这个文件夹里面包含了一些验证文件,certbot 会通过访问 example.com/.well-known/acme-challenge 来验证你的域名是否绑定的这个服务器。这个命令在大多数情况下都可以满足需求,

但是有些时候我们的一些服务并没有根目录,例如一些微服务,这时候使用 --webroot 就走不通了。certbot 还有另外一种模式 --standalone , 这种模式不需要指定网站根目录,他会自动启用服务器的443端口,来验证域名的归属。我们有其他服务(例如nginx)占用了443端口,就必须先停止这些服务,在证书生成完毕后,再启用。

certbot certonly --standalone -d example.com -d www.example.com

证书生成完毕后,我们可以在 /etc/letsencrypt/live/ 目录下看到对应域名的文件夹,里面存放了指向证书的一些快捷方式。

这时候我们的第一生成证书已经完成了,接下来就是配置我们的web服务器,启用HTTPS。

Nginx 配置启用 HTTPS

博客系统使用的是Nginx 服务器来转发请求,这里贴一下我的Nginx配置。

    server {
        server_name diamondfsd.com www.diamondfsd.com;
        listen 443;
        ssl on;
        ssl_certificate /etc/letsencrypt/live/diamondfsd.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/diamondfsd.com/privkey.pem;

        location / {
           proxy_pass http://127.0.0.1:3999;
           proxy_http_version 1.1;
           proxy_set_header X_FORWARDED_PROTO https;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header Host $host;
        }
    }
    server {
        server_name api.diamondfsd.com;
        listen 443;
        ssl on;
        ssl_certificate /etc/letsencrypt/live/api.diamondfsd.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/api.diamondfsd.com/privkey.pem;

        location / {
           proxy_pass http://127.0.0.1:4999;
           proxy_http_version 1.1;
           proxy_set_header X_FORWARDED_PROTO https;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header Host $host;

        }
    }

主要是监听 443 端口,启用 SSL,并配置 SSL 的证书路径(公钥,私钥的路径)。
通过这些配置 我们就已经成功的完成了 Https 的启用。
现在打开我的博客 https://diamondfsd.com 就可以看到标有 安全 的字样。

alt

自动更新 SSL 证书

配置完这些过后,我们的工作还没有完成。 Let’s Encrypt 提供的证书只有90天的有效期,我们必须在证书到期之前,重新获取这些证书,certbot 给我们提供了一个很方便的命令,那就是 certbot renew
通过这个命令,他会自动检查系统内的证书,并且自动更新这些证书。
我们可以运行这个命令测试一下

certbot renew --dry-run

我在运行的时候出现了这个错误

Attempting to renew cert from /etc/letsencrypt/renewal/api.diamondfsd.com.conf produced an unexpected error: At least one of the required ports is already taken.. Skipping.

alt
这是因为我的api.diamondfsd.com生成证书的时候使用的是 --standalone 模式,验证域名的时候,需要启用443端口,这个错误的意思就是要启用的端口已经被占用了。 这时候我必须把nginx先关掉,才可以成功。果然,我先运行 service nginx stop 运行这个命令,就没有报错了,所有的证书都刷新成功。

证书是90天才过期,我们只需要在过期之前执行更新操作就可以了。 这件事情就可以直接交给定时任务来完成。linux 系统上有 cron 可以来搞定这件事情。
我新建了一个文件 certbot-auto-renew-cron, 这个是一个 cron 计划,这段内容的意思就是 每隔 两个月的 凌晨 2:15 执行 更新操作。

15 2 * */2 * certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"

--pre-hook 这个参数表示执行更新操作之前要做的事情,因为我有 --standalone 模式的证书,所以需要 停止 nginx 服务,解除端口占用。
--post-hook 这个参数表示执行更新操作完成后要做的事情,这里就恢复 nginx 服务的启用

最后我们用 crontab 来启动这个定时任务

crontab certbot-auto-renew-cron

至此,整个网站升级到HTTPS就完成了。 总结一下我们需要做什么

  1. 获取Let’s Encrypt 免费证书
  2. 配置Nginx开启HTTPS
  3. 定时刷新证书

鸣谢 Let’s Encrypt 组织以及所有该组织的贡献者支持者 为我们提供 免费的安全证书。

参考: Certbot centosrhel7-nginx
参考: Let’s Encrypt getting-startd
参考: Archlinux cron
参考: Nginx configuring-https-servers

好看的小说

1.微微一笑很倾城(上海剧酷文化)
2.且试天下(辛迪加影视)
3.十年一品温如言(欢瑞世纪、芒果TV)
4.东宫(唐德影视、于正工作室)
5.蔓蔓青萝(中影集团)
6.三生三世十里桃花(剧酷传播)
7.凉生我们可不可以不忧伤(慈文影视)
8.曾有一个人爱我如生命(海润影视)
9.跨过千年来爱你(欢瑞世纪)
10.美人为馅(于正工作室、爱奇艺)
11.如果蜗牛有爱情(正午阳光影业、企鹅影业)
12.醉玲珑(唐丽君团队)
13.温暖的弦(聚美影视)
14.诛仙(欢瑞世纪)
15.原来你还在这里(唐人影视)
16.木槿花西月锦绣(荣信达影视)
17.爱情的开关(海润影视、芒果娱乐、凯悦娱乐)
18.夏有乔木雅望天堂(芒果娱乐)
19.古剑奇谭2(阿里影业)
20.那些回不去的年少时光(梦幻星生园)
11.孤芳不自赏(派乐影视、克顿传媒)
22.全职高手(企鹅影业)
23.非我倾城:王爷要休妃(欣瑞儒意影视)
24.我在回忆里等你(唐人影视)
25.路从今夜白(世纪长龙、无限自在娱乐、莱彼特文化传媒)
26.特工皇妃(慈嘉影视)
27.后宫如懿传(新丽传媒)
28.凤求凰(于正工作室)
29.爵迹(慈文传媒)
30.何所冬暖,何所夏凉(青竺影视)
31.庆余年(唐人影视)
32.京门风云(响巢看看)
33.致我们单纯的小美好(保密中)
34.长歌行(华策影视)
35.别那么骄傲(芒果娱乐)
36.轩辕剑之汉之云(上海新文化传媒)
37.明星志愿(上海新文化传媒、爱奇艺)
38.天下之倚剑听雨(芒果娱乐)
39.烈火如歌(嘉行传媒、尚世影视)

40.美人谋律(嘉行传媒、尚世影视)
41.皇后出墙记(于正工作室)
42.九州天空城(上影寰亚、企鹅影业)
43.斗破苍穹(新丽传媒)
44.择天记(柠檬影业)
45.大富翁(上海新文化传媒)
46.莽荒纪(天悦东方文化传媒)
47.扶摇皇后(柠檬影业)
48.绝代双骄(华策影视)
49.一路繁花相送(领骥影视)
50.那片星空那片海(梦幻星生园)
51.倩女幽魂(华策影视)
52.搜神记(华策影视)
53.寻找前世之旅(爱奇艺、中汇影视)
54.锦绣未央(克顿传媒)
55.兰陵缭乱(保密中)
56.长相思(梦幻星生园)
57.曾许诺(剧酷传播)

58.不负如来不负卿(保密中)
59.三生三世枕上书(刘雨欣工作室)
60.无心法师2(唐人影视、搜狐视频)
61.他来了请闭眼2(正午阳光影业)
62.落花时节又逢君(保密中)
63.亲爱的阿基米德、亲爱的苏格拉底、亲爱的弗洛伊德(保密中)
64.岁月忽已暮(慈文传媒)
65.亿万老婆买一送一(克顿传媒)
66.爱你是我做过最好的事(华视影业)
67.回到明朝当王爷(慈文传媒)
68.寻找爱情的邹小姐(慈文传媒)
69.极品家丁(华策影视)

70.那些不为人知的故事(保密中)
71.南方有乔木(保密中)
72.仙剑奇侠传5云之凡(上海新文化传媒)
73.纨绔世子妃(保密中)
74.吉祥纹莲花楼(欢瑞世纪)
75.江南恨(华映影业)
76.一吻定情(PPTV)
77.龙樱(保密中)
78.七根凶简(保密中)
79.暗恋橘生淮南(保密中)
80.画江湖之不良人(爱奇艺)
81.黑白无双(优酷土豆)

82.虎鹤(优酷土豆)
83.火王(芒果TV)
84.幻城(上海耀客文化传媒)
85.夏至未至(上海辛加迪影视)
86.仙剑客栈2(优酷土豆)
87.天才J2(优酷土豆)
88.金粉世家(强视传媒)
89.射雕英雄传(华策影视)
90.小李飞刀(华策影视)
91.翻译官(剧芯文化、乐视网、嘉行传媒)
92.九州海上牧云记(九州梦工厂国际文化传播)


http://tieba.baidu.com/p/4200940502

http://news.sina.com.cn/o/2016-08-04/doc-ifxutfyw0588270.shtml

http://tieba.baidu.com/p/4406595951

http://www.cankaoxiaoxi.com/ent/20161117/1436394.shtml

http://dy.163.com/v2/article/detail/C1SG2G6U05179AI7.html

http://www.chachaba.com/news/zhuanti/fanwen/duhougan/20161128_291708.html