开启小绿锁的信仰

哪,就是地址栏里面那个小绿锁啦。暂时没有没关系,最近正在换服务器,说不定哪天就有小绿锁了呢。

以前 SSL 证书是收费的,也有主机商会赠送,Github 学生有会里面也有赠送。现在好了,有了 Let's Encrypt 项目,这个小绿锁也是人人可得的啦~

下面说说如何使用这个东西。

首先,你得有个域(妹)名(子)。然后,你得有个 VPS。

手动安装

首先,

git clone https://github.com/certbot/certbot

拉取我们所需的 certbot 软件。

然后看一下它的说明文件:

./certbot-auto --help

再然后把下面的东西改成你自己的,并执行它。

$ certbot-auto certonly --email {你的邮箱} --webroot \
    --webroot-path {网站 A 根路径} -d {域名 A1} -d {域名 A2} \
    --webroot-path {网站 B 根路径} -d {域名 B1} -d {域名 B2} \
    --agree-tos \
    --expand

这个命令只获取授权而不安装(应用)。需要手动改 Apache 设置才能真正启用 SSL。

需要说明的是,letsencrypt 不支持通配子域名,例如 *.haoyu.love 是不可以的。必须把子域名一个一个一个都写出来…… 子域名多的话简直是噩梦……Sad。不知道以后会不会支持通配子域名呢?

所以呢,上面的东西执行完毕后得到了什么呢?

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live / 你的域名 / fullchain.pem. Your cert will
   expire on 一个时间. To obtain a new version of the certificate in
   the future, simply run Certbot again.

/etc/letsencrypt/live / 你的域名 / 里面看看。

cert.pem -> ../../archive / 你的域名 / cert1.pem // 域名证书文件
chain.pem -> ../../archive / 你的域名 / chain1.pem // 证书链文件
fullchain.pem -> ../../archive / 你的域名 / fullchain1.pem // 域名证书文件 + 证书链文件
privkey.pem -> ../../archive / 你的域名 / privkey1.pem // 私钥文件

至于怎么安装证书嘛…… 看下面。

Apache 自动安装

对于 Apache 的测试,我是在 Ubuntu 上面进行的。真心简单。

用 git 拉取所需代码。./certbot-auto --help 这句话不仅会输出帮助文件,而且会自动建立所需环境(跳过这步的话后面会报错)。最后执行 ./certbot-auto 通过交互的方式获取证书,并直接安装。

安装过程如下

  • 输入你的邮箱,用来找回证书。
  • 同意协议。地球人都知道要选择什么。
  • 系统列出了你所有的 vhosts,你要选择你想给哪个域名颁发证书。
  • httphttps 并存,还是强制 http 呢?我一般选择强制的。为啥?你输入网址的时候会输入前面的 https:// 么?
  • 木有了。

这样,certbot 就会自动帮助我们完成申请证书、修改 apache 配置文件以应用证书等一系列过程,省时省心。

Nginx 手动安装

Nginx 新手上路,很多东西不熟悉呢。摸着石头过河吧。

对于 Nginx 的测试,我是在 Cent7 上进行的。在手动获取证书之后,开始修改 Nginx 的配置文件。

server {
    # 同时监听 80 和 443 端口
    listen 80;
    listen [::]80;
    listen 443 ssl;
    listen [::]443 ssl;

    # 下面这些配置,维持原来的配置即可
    server_name haoyu.love;
    index index.php;
    charset utf-8;
    root  /path/to/your/website;

    # 强制将 http 访问转为 https 访问
    if ($ssl_protocol ="") {rewrite ^ https://$server_name$request_uri? permanent;}

    # SSL 证书相关的东西
    ssl_certificate /etc/letsencrypt/live / 你的域名 / cert.pem;
    ssl_certificate_key /etc/letsencrypt/live / 你的域名 / privkey.pem;
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout 5m;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

    # WordPress 的伪静态
    location / {try_files $uri $uri/ /index.php?$args;}

    # 这个要加上,不然不能正常获取证书
    location ~ /.well-known {allow all;}
}    

恩,改完之后,service nginx reload 就好了。

Webmin

新版 Webmin 里面集成有 Let's Encrypt 的引用。只需要填写软件的可执行程序地址即可。其余东西一看就懂。

只测试了 Apache,没有测试 Nginx。

自动续期

证书的有效期是 90 天,快到 90 天的时候续期就好了,反正都是免费的。

手动来玩也不麻烦,一句 certbot renew --dry-run 即可搞定。

自动的话,设置个定时任务即可。

$ crontab -e

下面添加一行

* * */7 * * certbot renew --quiet ; service apache reload

或者

* * */7 * * certbot renew --quiet ; lnmp nginx reload

就这样。但是官方说,如果你使用 cron 或者 systemd 的话,建议设置为每天运行两次以防止某些情况下续期失败。

其他

原来(5 月及之前),我们是需要 git clone https://github.com/letsencrypt/letsencrypt 的,也就是说,软件名字叫做 letsencrypt。一言不合就改名,也是蛮醉的。

其实可以在系统里面直接安装 certbot 的。Cent 里面需要安装 epel-release certbot,Ubuntu 里面需要安装 python-letsencrypt-apache

其他说明,看 Certbot 官网,上面说得也很详细。

最后,如果希望小绿锁常驻地址栏,那么需要保证页面上所有东西都是 https 方式引用的,包括图片、js、css 等。这个工程量就大了。本来想用 这个脚本 将所有 http 强行替换为 https,但是…… 新浪 image 服务器不支持 https……Sad……

留下评论