当前位置 博文首页 > 文章内容

    docker获取Let's Encrypt永久免费SSL证书的方法

    作者:shunshunshun18 栏目:未分类 时间:2021-01-03 18:09:21

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    一、起因

    官方的cerbot太烦了,不建议使用还不如野蛮生长的acme.sh,而这里介绍docker运行cerbot获取Let's Encrypt永久免费SSL证书

    二、选型

    cerbot的证书不会自动刷新日期,但是acme.sh自带这功能,每天凌晨0:00自动检测过期域名并且自动续期

    选择docker运行cerbot,是为了让服务器里尽量少配置和无意义的程序,方便管理。例如Let's Encrypt需要的Python2.7,git,pip我们都不需要装在宿主机内,容器就自己配置好了

    原文 https://github.com/acmesh-official/acme.sh/wiki/Run-acme.sh-in-docker

    三、拉取镜像

    $ docker pull neilpang/acme.sh

    以dns mode运行docker命令

    $ docker run --rm -it \
     -v "$(pwd)/out":/acme.sh \
     -e Ali_Key="xxxxxx" \
     -e Ali_Secret="xxxx" \
     neilpang/acme.sh --issue --dns dns_ali -d domain.cn -d *.domain.cn

    成功之后,证书会保存在out文件夹,也可以指定路径,修改上面第一行 "$(pwd)/out",改为你想要保存的路径即可

    四、注意

    --dns dns_ali

    要根据你域名的dns模式选择,显然这里是阿里。所以前面的两项配置才是Ali_Key,Ali_Secret

    Ali_Key,Ali_Secret

    需要从阿里云后台获取

    不知道自己域名的dns模式可以去这里查找 https://github.com/acmesh-official/acme.sh/wiki/dnsapi

    如何获取域名的dns模式及相关配置,可以直接找你域名的客服

    用腾讯做例子

    $ docker run --rm -it \
     -v "$(pwd)/out":/acme.sh \
     -e DP_Id="xxxxxx" \
     -e DP_Key="xxxx" \
     neilpang/acme.sh --issue --dns dns_dp -d domain.cn -d *.domain.cn

    腾讯这坑爹收购了DNSPod,所以是dns_dp

    我一开始还以为是TX_Id,TX_Key,dns_tx之类的

    找了一圈,发现自己的阿里服务器正常使用,但就是步骤没问题

    于是问公司拿到域名账户,问腾讯客服才知道这事

    当然,这跟腾讯无关,坑爹公司的锅更大

    老子干这个啥都没有

    五、命令

    docker run --rm 的命令懂得都懂,运行完就退出,这样能执行个锤子自动更新ssh证书

    方法一

    不docker run --rm,直接docker run就好了

    优点简单,缺点一个容器专门跑这个,太浪费资源了

    方法二

    定时任务跑docker run --rm,原文的例子就有了

    #run cron job
    docker run --rm -it \
     -v "$(pwd)/out":/acme.sh \
     --net=host \
     neilpang/acme.sh --cron

    其实--cron是linux的crontab参数,具体用法不累赘了

    喜欢用crontab的用crontab

    不喜欢的看看 博文里的二

    方法三

    把这玩意和docker守护进程绑一起,毕竟守护进程必须开,不算浪费资源

    这是acme.sh的推荐做法

    同样带原文的例子

    $ docker run --rm -itd \
     -v "$(pwd)/out":/acme.sh \
     --net=host \
     --name=acme.sh \
     neilpang/acme.sh daemon

    六、最终结果

    $ docker run --rm -itd \
     -v "$(pwd)/out":/acme.sh \
     -e DP_Id="xxxxxx" \
     -e DP_Key="xxxx" \
     neilpang/acme.sh --issue --dns dns_dp -d domain.cn -d *.domain.cn daemon