https 配置 acme.sh

另一个 https 配置工具
更新于: 2022-11-29 14:27:49

背景

  • 为什么想学习这个? 
    • certbotacme.sh,在 github 上的关注度差不多都有 29K+,所以都是优秀的项目
    • 另外:成年人全都要,不做选择
  • 原来使用 certbot 有什么问题?
    • 之前使用的 certbot,会有各种版本的问题,具体来讲,就是 1.11 的版本 certbot 遇到了1.30的证书,无法继续生成
  • acme.sh 有什么比较看好的点?
    • 干净的目录,生成的证书文件也都在 .acme.sh 目录里,固定目录
    • 不需要单独搞定时任务,因为安装的时候自带了
Attempting to parse the version 1.30.0 renewal configuration file found at /etc/letsencrypt/renewal/js.work.conf 
with version 1.11.0 of Certbot. 
This might not work.
$ certbot --version
certbot 1.11.0
# 删除老版本,会将各种目录一起删除掉(然后 https 就会失效)
yum remove certbot
# 安装新的版本,用 pip 管理会比较熟悉一点
pip install certbot

安装

# 安装
curl https://get.acme.sh | sh -s email=1290657123@qq.com
# 添加到 alias 里
# 我自己的 settings 里有这个<还未找到哪个包里有>
alias acme.sh='/root/.acme.sh/acme.sh

准备工作

  • 将你的域名解析到对应的 ip 上去,ping 的时候,通过
  • 服务器防火墙什么的都测试一下,保证外网能通过
  • 准备好 DP_ID/DP_KEY,我这里使用 dns 方式来验证域名

生成方式

  • dns_pod 管理域名,方便直接用 API 来管理 https 的生成
  • 这里的 dp_id/dp_key 在自己的 ushell-module-secret 里已经放好了
export DP_Id="123123"
export DP_Key="YOUR_DP_KEY"

dns_dp: 第一次生成

生成的文件会在这里: ~/.acme.sh/moban.work_ecc

中间高亮部分为: 你的域名

acme.sh --issue --dns dns_dp -d moban.work -d www.moban.work --nginx

dns_dp: 追加生成

为什么要用 --force:是为了写同一个文件,保证在 nginx 配置的时候,可以指向同一个文件

另:acme.sh还有一个 install 的过程,这个过程感觉不是必须的,因为没有也工作正常。

--nginx: 没发现有什么作用,暂时也可以不用管。

acme.sh --issue --dns dns_dp -d moban.work -d www.moban.work -d api.moban.work --nginx --force
执行成功的画面

nginx 核心配置

重点关注: update ssls 这后面3句。

例子: YOUR_DOMAIN: baidu.com

ssl_certificate /root/.acme.sh/YOUR_DOMAIN_ecc/fullchain.cer;
ssl_certificate_key /root/.acme.sh/YOUR_DOMAIN_ecc/YOUR_DOMAIN.key;
ssl_trusted_certificate /root/.acme.sh/YOUR_DOMAIN_ecc/ca.cer;

目前行得通的配置,因为直接使用了 .acme.sh 目录。

server {
    listen 80;
    server_name www.moban.work moban.work;
    return 301 https://www.moban.work;
}

server {
    listen 443 ssl;
    server_name www.moban.work moban.work;
    # update ssls
    ssl_certificate /root/.acme.sh/moban.work_ecc/fullchain.cer;
    ssl_certificate_key /root/.acme.sh/moban.work_ecc/moban.work.key;
    ssl_trusted_certificate /root/.acme.sh/moban.work_ecc/ca.cer;

    gzip on;
    charset utf-8,gbk;

    root /var/www/moban.work;
    index index.html;
}

官方推荐的配置<个人不推荐>

  • 个人认为这种缺点在于:还要再自己维护一个 cert.pem 这种安装任务的 crontab 了 发现不需要,他会自动管理,貌似这种方法很完美。
  • 还不如直接关掉 acme.sh 的自动更新功能,防止目录发生变化
ssl_certificate /home/aric.zheng/certs/moban.work/cert.pem;
ssl_certificate_key /home/aric.zheng/certs/moban.work/key.pem;

自带 renew

定时任务,会保证在证书过期之前自动更新,不需要再手动维护证书的更新任务了。

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

坑1: 各种优化,其实有会导致不安全的 https 出现

网上提到的这些所谓的调优配置,加上之后有可能就会使 https 失效

参考: https://32e.co/2020/07/17/shell-https-acme-sh/

#ssl性能调优
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_timeout 10m;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_stapling on;
ssl_stapling_verify on;

坑2:  不要直接使用 .acme.sh 目录

前面证书生成以后, 接下来需要把证书 copy 到真正需要用它的地方.

注意, 默认生成的证书都放在安装目录下: ~/.acme.sh/, 请不要直接使用此目录下的文件, 例如: 不要直接让 nginx/apache 的配置文件使用这下面的文件. 这里面的文件都是内部使用, 而且目录结构可能会变化.

正确的使用方法是使用 --install-cert 命令,并指定目标位置, 然后证书文件会被copy到相应的位置, 例如:

 

解释: https://github.com/acmesh-official/acme.sh/wiki/说明

acme.sh --install-cert -d moban.work --ecc \
  --key-file       /home/aric.zheng/certs/moban.work/key.pem  \
  --fullchain-file /home/aric.zheng/certs/moban.work/cert.pem \
  --reloadcmd     "nginx -s reload"
ssl_certificate /home/aric.zheng/certs/moban.work/cert.pem;
ssl_certificate_key /home/aric.zheng/certs/moban.work/key.pem;

更新

  • 自动更新
  • 手动更新
  • 关闭自动更新
acme.sh --upgrade --auto-upgrade
acme.sh --upgrade
acme.sh --upgrade --auto-upgrade  0

查看证书情况

acme.sh --info -d moban.work --ecc

ssl 等级测试

https 测试

参考