哪,就是地址栏里面那个小绿锁啦。暂时没有没关系,最近正在换服务器,说不定哪天就有小绿锁了呢。
以前 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,你要选择你想给哪个域名颁发证书。
- 是
http
和https
并存,还是强制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……
发表回复