https 配置 acme.sh
另一个 https 配置工具
背景
- 为什么想学习这个?
- 有
certbot
和acme.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
失效
#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到相应的位置, 例如:
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