换个方式安装 Let’s Encrypt

OSError: Command /home/administrator/…ncrypt/bin/python2.7 – setuptools pkg_resources pip wheel failed with error code 2

之前没有碰到过这个问题,不论是 14.0 还是 16.0 的 Ubuntu 版本,今天在腾讯云上出现了,而且重装系统,两个操作系统版本上都遇到这个问题,google无解。

certbot的 issue 里也有人提了相似的状况,不过试了里面的几种解决办法也不行,而且作者对此也暂时没有解决方案。

好在网上找到了另一种方法:

调用 acme_tiny.py 认证、获取、更新证书,不需要额外的依赖。

下载到本地

wget https://raw.githubusercontent.com/carpliyz/Lets-encrypt/master/letsencrypt.conf
wget https://raw.githubusercontent.com/carpliyz/Lets-encrypt/master/letsencrypt.sh
chmod +x letsencrypt.sh

修改配置文件 letsencrypt.conf

只需要修改 DOMAIN_KEY DOMAIN_DIR DOMAINS 为你自己的信息

ACCOUNT_KEY="letsencrypt-account.key"
DOMAIN_KEY="noxxxx.com.key"
DOMAIN_DIR="/home/wwwroot/noxxxx.com"
DOMAINS="DNS:noxxxxe.com,DNS:www.noxxxx.com"
#ECC=TRUE
#LIGHTTPD=TRUE

执行过程中会自动生成需要的 key 文件。其中 ACCOUNT_KEY 为账户密钥, DOMAIN_KEY 为域名私钥, DOMAIN_DIR 为域名指向的目录,DOMAINS 为要签的域名列表, 需要 ECC 证书时取消 #ECC=TRUE 的注释,需要为 lighttpd 生成 pem 文件时,取消 #LIGHTTPD=TRUE 的注释。

运行

./letsencrypt.sh letsencrypt.conf

注意

你的域名要配好 DNS 通过域名访问到到 /home/wwwroot/noxxxx.com 目录,用于域名的验证

将会生成如下几个文件

lets-encrypt-x3-cross-signed.pem
example.chained.crt # 即网上搜索教程里常见的 fullchain.pem
example.com.key # 即网上搜索教程里常见的 privkey.pem
example.crt
example.csr

在 nginx 里添加 ssl 相关的配置 这里不是pem的文件,所以不要傻傻的去找了

ssl_certificate /path/to/cert/example.chained.crt;
ssl_certificate_key /path/to/cert/example.key;
ssl_session_timeout 10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-SHA384:ECDHE-RSA-:ECDHE:!DES:!3DES:!MD5:!DSS:!PKS;
ssl_session_cache builtin:1000 shared:SSL:10m;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;

cron 定时任务

每个月自动更新一次证书,可以在脚本最后加入 service nginx reload等重新加载服务。

0 0 1 * * /etc/nginx/certs/letsencrypt.sh /etc/nginx/certs/letsencrypt.conf >> /var/log/lets-encrypt.log 2>&1