Let’s encrypt 的正确打开方式

Let’s encrypt 大概是目前唯一一家提供免费多域名 ECC 证书的组织。折腾了这么久 SSL ,今天做个总结,以备查阅。

再更新:CloudFlare 提供了两个 API Key,一个是 Global API Key,一个是 Origin CA Key,acme.sh 中应该使用 Global API Key,不然无法添加记录。

更新:推荐使用 acme.sh 客户端。 acme.sh 使用 DNS API 全自动获取证书,支持大部分 DNS 服务提供商,包括 CloudFlare 和 CloudXNS。首先,在 account.conf 中写入密匙。然后,使用 --dns选项指定验证方式,如下

/root/.acme.sh/acme.sh --issue --dns dns_cx -d ohhere.xyz -d dns.ohhere.xyz -d ftp.ohhere.xyz -d gg.ohhere.xyz -d kod.ohhere.xyz -d m.gg.ohhere.xyz -d m.wiki.ohhere.xyz -d m.y2b.ohhere.xyz -d mail.ohhere.xyz -d mgg.ohhere.xyz -d my2b.ohhere.xyz -d oh.ohhere.xyz -d own.ohhere.xyz -d pic.ohhere.xyz -d pro.ohhere.xyz -d s.ohhere.xyz -d sea.ohhere.xyz -d sni.ohhere.xyz -d ss.ohhere.xyz -d ssh.ohhere.xyz -d upload.ohhere.xyz -d wiki.ohhere.xyz -d www.ohhere.xyz -d y2b.ohhere.xyz --keylength ec-256
/root/.acme.sh/acme.sh --renew -d ohhere.xyz -d dns.ohhere.xyz -d ftp.ohhere.xyz -d gg.ohhere.xyz -d kod.ohhere.xyz -d m.gg.ohhere.xyz -d m.wiki.ohhere.xyz -d m.y2b.ohhere.xyz -d mail.ohhere.xyz -d mgg.ohhere.xyz -d my2b.ohhere.xyz -d oh.ohhere.xyz -d own.ohhere.xyz -d pic.ohhere.xyz -d pro.ohhere.xyz -d s.ohhere.xyz -d sea.ohhere.xyz -d sni.ohhere.xyz -d ss.ohhere.xyz -d ssh.ohhere.xyz -d upload.ohhere.xyz -d wiki.ohhere.xyz -d www.ohhere.xyz -d y2b.ohhere.xyz --ecc
/root/.acme.sh/acme.sh --installcert -d ohhere.xyz -d dns.ohhere.xyz -d ftp.ohhere.xyz -d gg.ohhere.xyz -d kod.ohhere.xyz -d m.gg.ohhere.xyz -d m.wiki.ohhere.xyz -d m.y2b.ohhere.xyz -d mail.ohhere.xyz -d mgg.ohhere.xyz -d my2b.ohhere.xyz -d oh.ohhere.xyz -d own.ohhere.xyz -d pic.ohhere.xyz -d pro.ohhere.xyz -d s.ohhere.xyz -d sea.ohhere.xyz -d sni.ohhere.xyz -d ss.ohhere.xyz -d ssh.ohhere.xyz -d upload.ohhere.xyz -d wiki.ohhere.xyz -d www.ohhere.xyz -d y2b.ohhere.xyz --keypath /etc/letsencrypt/live/ohhere.xyz/privkey.pem --fullchainpath /etc/letsencrypt/live/ohhere.xyz/fullchain.pem --reloadcmd "nginx -s reload" --ecc

生成证书主要有两种方案:

  1. 关闭 nginx
    sudo nginx -s stop
  2. 执行
    sudo /path/to/certbot-auto certonly
  3. 选择 standalone 模式
  4. 输入域名,可以使用 Excel + VBS 脚本代替手打,脚本如下
    text = "ohhere.cf,www.ohhere.cf"
    Set WshShell = WScript.CreateObject("WScript.Shell")
    WScript.Sleep 5000
    WshShell.SendKeys text
    msgbox "Done"
    Set WshShell = Nothing
  5. 看到 “Congratulations!” 提示,修改 nginx 的各个配置文件,改成
    ssl_certificate /etc/letsencrypt/live/ohhere.cf/fullchain.pem
    ssl_certificate_key /etc/letsencrypt/live/ohhere.cf/privkey.pem
    server {
    listen 80;
    server_name ohhere.cf;
    rewrite ^/(.*) https://$server_name/$1 permanent;
    }
  6. 重启nginx
    nginx -c /usr/local/nginx/conf/nginx.conf
  7. 打开首页 ohhere.cf 看到小绿锁
  8. 创建证书更新脚本 renew.sh
    #!/bin/bash
    /usr/local/nginx/sbin/nginx -s stop
    /root/tools/certbot-auto renew --quiet --no-self-upgrade
    /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
    date >> /root/tools/renew/log.txt
  9. 设置 cron 任务,修改 /etc/crontab ,加入
    0 0 * * * /path/to/renew.sh

 

  1. 安装程序
    sudo ./acme.sh --install
  2. 关闭 nginx/lighttpd
    sudo nginx -s stop
  3. 使用 standalone 模式生成 ECC 算法多域名证书
    acme.sh --issue --standalone -d dl.ohhere.cf -d sss.ohhere.cf --keylength ec-256
  4. 如果使用 lighttpd 还需要合并证书
    cat /path/to/host.key /path/to/host.crt > /path/to/host.pem
  5. 启动 nginx/lighttpd ,进行测试
    sudo nginx -c /usr/local/nginx/conf/nginx.conf
  6. 创建证书更新脚本 renew.sh
    #!/bin/bash
    service lighttpd stop
    /root/.acme.sh/acme.sh --renew -d dl.ohhere.cf
    /root/.acme.sh/acme.sh --renew -d sss.ohhere.cf
    service lighttpd start
    date >> /root/RenewLog.txt
  7. 设置 cron 任务,修改 /etc/crontab ,加入
    0 0 * * * /path/to/renew.sh

 

这两种方案各有利弊,官方客户端不能生成 ECC 证书,但是稳定,第三方脚本可以,但是没有做错误处理,以至于几乎每次执行因为有个别无法一次成功而报错,几乎不可用,等修复了再用。


发表评论