用letsencrypt生成证书

在国内,个人网站使用HTTPS是势在必行,但由于证书太贵,一般人都望而却步了。好在Let's Encrypt!给大家带来了权威(受所有主流浏览器信任)、真正免费(并开源,随时申请)、自动化(apache、nginx)的证书制作工具链。让证书制作变得相当简单省时。

当看到这篇文章时,你应该注意到我的网站应该能在浏览器地址栏显示一个代表安全链接的小绿锁了。这意味着:浏览器与服务器之间的传输是完全加密的,任何内容都不会被他人所监听(要知道,HTTP是完全透明的,任何你浏览器与服务器之间的数据都可以轻而易举地被第三方获取并修改,这是非常可怕的)、不会受到中间人(MIM)的(恶意)修改(比如运营商修改JS脚本向网站插入广告的这种低劣手段),这些手段在HTTPS出现之后就被彻底终结了。这还得感谢第三方的公证机构,保证了双方的通信没有被劫持、伪装。要想知道HTTPS/SSL的工作原理,可以搜索相关词汇,以下关键词可能会有帮助:HTTPS、SSL、TLS、公钥加密、CA。

好了,我这篇文章是简要地介绍一下怎么用 Let's Encrypt! 手动制作证书,以及应该到 nginx 服务器上(我没用过apache,所以就不作讨论了)。

首先,你得拥有一份 Let's Encrypt! 证书制作工具的拷贝,可以到 https://github.com/letsencrypt/letsencrypt 去下载一份,或者git一份到服务器:

root@localhost:~# git clone --depth 1 https://github.com/letsencrypt/letsencrypt.git
Cloning into 'letsencrypt'...
remote: Counting objects: 531, done.
remote: Compressing objects: 100% (439/439), done.
remote: Total 531 (delta 57), reused 279 (delta 33), pack-reused 0
Receiving objects: 100% (531/531), 548.93 KiB | 0 bytes/s, done.
Resolving deltas: 100% (57/57), done.
Checking connectivity... done.
root@localhost:~#

里面有这些文件,其中 letsencrypt-auto 就是主要用到的工具了:

root@localhost:~# cd letsencrypt/
root@localhost:~/letsencrypt# ls -aF
./              .travis.yml      Vagrantfile          letsencrypt-auto*                 setup.cfg
../             CHANGES.rst      acme/                letsencrypt-compatibility-test/   setup.py
.dockerignore   CONTRIBUTING.md  bootstrap/           letsencrypt-nginx/                tests/
.git/           Dockerfile       docker-compose.yml   letshelp-letsencrypt/             tools/
.gitattributes  Dockerfile-dev   docs/                linter_plugin.py                  tox.cover.sh*
.gitignore      LICENSE.txt      examples/            pep8.travis.sh*                   tox.ini
.pep8           MANIFEST.in      letsencrypt/         py26reqs.txt
.pylintrc       README.rst       letsencrypt-apache/  readthedocs.org.requirements.txt
root@localhost:~/letsencrypt#

这里我只讲怎么手动生成证书并应用到 nginx 中。但放心,这只会占用你几分钟的时间。

但还有一点声明的是:由于工具链是自动(自动是指你不必与证书机构有直接的签署沟通)的,所以,为了确保你是域名及端口的持有者,letsencrypt 会临时绑定到域名所指向的IP对应主机的 80 端口,然后与 letsencrypt 的证书服务器进行通信。以验证此域名绑定到的IP是真实的,端口是有效的。所以:你的网站可能会因此停站一到几分钟

然后,接下来就是生成证书,很简单的。执行 ``./letsencrypt-auto``,会安装必要的依赖(Python,GCC等)之后