03月07, 2017

使用 Let's Encrypt

Getting Started Let’s Encrypt

要为你的网站启用HTTPS,你需要从证书颁发机构得到一份证书,Let’s Encrypt 正是这样的证书颁发机构。为从 Let’s Encrypt 获得一份你的网站主机证书,你必须证明你控制着这台主机,对于 Let’s Encrypt 来说,你可以使用正运行在你站点主机上的ACME协议支持的软件应用来做到这点。To enable HTTPS on your website, you need to get a certificate (a type of file) from a Certificate Authority (CA). Let’s Encrypt is a CA. In order to get a certificate for your website’s domain from Let’s Encrypt, you have to demonstrate control over the domain. With Let’s Encrypt, you do this using software that uses the ACME protocol, which typically runs on your web host.

要搞清楚什么方法最有效,你需要知道是否你可以通过 SSH 连接到你的主机。如果你完全通过像 cPanelPlesk,或者 WordPress 这样的控制面板管理着你的网站,那很可能你就没有SSH,你可以咨询下你的主机提供商。To figure out what method will work best for you, you will need to know whether you have shell access (also known as SSH access) to your web host. If you manage your website entirely through a control panel like cPanel, Plesk, or WordPress, there’s a good chance you don’t have shell access. You can ask your hosting provider to be sure.

With Shell Access

Let’s Encrypt 建议拥有SSH的大多数人使用 Certbot ACME 客户端,它能够使证书颁发和安装自动化,而且无需停机。对不想自动配置的人来说,Certbot 也拥有专业模式,它易使用,可工作在许多操作系统上,并且拥有完善的文档。访问Certbot 获得适合你的操作系统和web服务的使用说明。 We recommend that most people with shell access use the Certbot ACME client. It can automate certificate issuance and installation with no downtime. It also has expert modes for people who don’t want autoconfiguration. It’s easy to use, works on many operating systems, and has great documentation. Visit the Certbot site to get customized instructions for your operating system and web server.

如果 Certbot 不满足你的需要,或者你想尝试点别的,这里有更多ACME协议的客户端供你选择。一旦你选好了客户端软件,看它的文档以继续前行。If Certbot does not meet your needs, or you’d like to try something else, there are many more ACME clients to choose from. Once you’ve chosen ACME client software, see the documentation for that client to proceed.

如果你正在尝试不同的 ACME客户端,使用我们的演示环境以避免遇到速率限制。 If you’re experimenting with different ACME clients, use our staging environment to avoid hitting rate limits.

使用 Certbot 管理RSA证书

按照 Let’s Encrypt 的指引使用 Certbot(运行环境 CentOS7 + Nginx)。

Step 1: 安装 Certbot

$ yum install certbot

Step 2: 使用 Certbot 颁发证书

$ certbot certonly --rsa-key-size 4096 -d xlange.com -d www.xlange.com

子命令 certonly 用于获取或续签证书但不用安装, 参数--rsa-key-size 指定颁发4096位的RSA证书,-d 指定证书绑定的域名,更多信息 certbot --help 查看。 续签证书用子命令 renewcertbot renew --rsa-key-size 4096 --force-renewal 则强制续签,默认是使用了 --keep-until-expiring --keep --reinstall ,三个都表示保持已存在的证书,直到过期后续签。也可以使用配置文件 Configuration file ,证书保存位置 Where are my certificates?

但是 Certbot 似乎没有提供申请ECC证书的方法,而且受限于DNS解析问题, 我目前可能搞不定证书,虽然提供了DNS模式,不过文档中尚未看到有现成的对接阿里云服务器的方法,开发者模式自定义插件我眼下也搞不来。于是按照 Jerry Qu 的指引,找到一个更好用的工具 acme.sh,用它可以方便的申请ECC证书,而且其DNS模式中已融合了众多云服务器DNS API,包括阿里云。

使用 acme.sh 管理RSA或ECC证书

它是一个ACME协议的Shell脚本,一个可替代Certbot的ACME协议客户端。An ACME Shell script, an acme client alternative to certbot: acme.sh。

Step 1: 在线安装

$ curl https://get.acme.sh | sh

The installer will perform 3 actions:

  1. Create and copy acme.sh to your home dir ($HOME): ~/.acme.sh/. All certs will be placed in this folder too.
  2. Create alias for: acme.sh=~/.acme.sh/acme.sh.
  3. Create daily cron job to check and renew the certs if needed.

Cron entry example:

0 0 * * * "/home/user/.acme.sh"/acme.sh --cron --home "/home/user/.acme.sh" > /dev/null

默认情况下,acme.sh 被安装到家目录下的 .acme.sh 子目录,以后创建的所有证书也将被放到这里,并建了个别名 acme.sh,还设置了定时任务去检查和续签证书。

$ acme.sh -h
https://github.com/Neilpang/acme.sh
v2.6.7
Usage: acme.sh  command ...[parameters]....

$ crontab -l
0 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
......

Step 2: 申请证书

使用 --issue 子命令颁发证书,-w 指定wwwroot目录,-d 指定包含的域名,--keylength 指定颁发证书的类型,可选参数 2048, 3072, 4096, 8192 or ec-256, ec-384ec开头的指定使用椭圆曲线加密算法(ECC),其他使用非对称加密算法(RSA)。

$ acme.sh --issue -w ~/xlange.com -d xlange.com -d www.xlange.com --keylength ec-384
Cert success.
Your cert is in  /root/.acme.sh/xlange.com_ecc/xlange.com.cer 
Your cert key is in  /root/.acme.sh/xlange.com_ecc/xlange.com.key 
The intermediate CA cert is in  /root/.acme.sh/xlange.com_ecc/ca.cer 
And the full chain certs is there:  /root/.acme.sh/xlange.com_ecc/fullchain.cer

更多选项和参数看这里:Options and Params

Step 3: 续签证书

第一次申请证书时,证书的保存目录 $HOME/.acme.sh/xlange.com_ecc 下面都已保存了csr文件 xlange.com.csr 、csr配置文件 xlange.com.csr.conf,以及使用参数配置文件:xlange.com.conf,打开参数配置文件:

  1 Le_Domain='xlange.com'
  2 Le_Alt='www.xlange.com'
  3 Le_Webroot='/root/xlange.com'
  4 Le_PreHook=''
  5 Le_PostHook=''
  6 Le_RenewHook=''
  7 Le_API='https://acme-v01.api.letsencrypt.org'
  8 Le_Keylength='ec-384'
  9 Le_LinkCert='https://acme-v01.api.letsencrypt.org/acme/cert/03bd13023888eaca44c4dc9e3722c7654dea'
 10 Le_LinkIssuer='https://acme-v01.api.letsencrypt.org/acme/issuer-cert'
 11 Le_CertCreateTime='1488561708'
 12 Le_CertCreateTimeStr='2017年 03月 03日 星期五 17:21:48 UTC'
 13 Le_NextRenewTimeStr='2017年 05月 02日 星期二 17:21:48 UTC'
 14 Le_NextRenewTime='1493659308'

在安装 acme.sh 后,前面提到的定时任务,每天都自动执行,所有的证书将每60天一次地被自地续签。 如果你想要强制续签,手动执行 acme.sh --renew -d example.com --force,强制续签ECC证书用 acme.sh --renew -d example.com --force --ecc。 该工具也提供了钩子, 类似Certbot的钩子,可以自定义脚本去做自动续签部署的任务。

Step 4: 添加 Nginx 配置项

ssl_certificate /path/to/xlange.com_ecc/fullchain.cer;
ssl_certificate_key  /path/to/xlange.com_ecc/xlange.com.key;

本文链接:https://xlange.com/post/getting-started-letsencrypt

-- EOF --

Comments

?