docker运行acme.sh 安装配置泛域名证书

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

首先是启动daemon的命令【以下是例子,停止容器会自动删除】

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

这样就会后台挂一个包含acme.sh的容器,并且这个容器会自动走定时任务以便自动续签证书。这里注意如果你使用了dnsapi(比如说签wildcard之类的场景),别忘了在这里使用-e参数去配置你的环境变量,像这样【以下是个例子,停止容器会自动删除】:

docker run --rm  -itd  \
  -v "$(pwd)/out":/acme.sh  \
  -e CF_Email="example@example.com" \
  -e CF_Key="asasasasasadasasas" \
  --net=host \
  --name=acme.sh \
  neilpang/acme.sh daemon

 

实际上安装好docker 后执行以下3步即可【以下才是完整教程】

1)博主使用腾讯云域名如下(-v,DP_Key,DP_Id配置自行修改)【以下是腾讯云例子,-e修改参数值】:

 docker run  -itd  \
  -v "/dnmp/services/nginx/ssl/acme":/acme.sh  \
  -e DP_Key="xxxxxxxxxxxxxxxx" \
  -e DP_Id="1111" \
  --net=host \
  --name=acme.sh \
  neilpang/acme.sh daemon

这里有有关于dnsapi模式的详细用法

然后一切没问题返回出来Container ID之后别忘了docker ps看一下容器是否在正常跑。

容器准备好了就可以用docker exec跑各种acme.sh的命令了。

docker  exec  acme.sh --help

2)签发泛域名证书【自行修改域名和邮箱地址,参考链接https://github.com/acmesh-official/acme.sh/wiki/ZeroSSL.com-CA

请替换成自己的域名,* 是通配符,支持任何一级子域名。

docker exec acme.sh --register-account -m aa@qq.com --server zerossl --issue --dns dns_dp -d aa.com -d *.aa.com

所生成的证书文件会自动保存到docker run时创建的数据卷中。(比如这里是$(pwd)/outrun命令执行时的根目录中的out文件夹)

证书包中有很多文件,其中域名.key 是秘钥;a.cer 存储的是 CA 证书,域名.cer 是域名证书,fullchain.cer 是前两者的拼接;域名.csr 是证书签名请求。

如:

3)Nginx 配置Http和Https共存

listen 80; #如果硬性要求全部走https协议,这一行去除
listen 443 ssl http2; #如果硬性要求全部走https协议,这里去除ssl
server_name chandao.test.cn;

#ssl on; #如果硬性要求全部走https协议,这里开启ssl on
ssl_certificate /dnmp/services/nginx/ssl/acme/aa.com/aa.com.cer;
ssl_certificate_key /dnmp/services/nginx/ssl/acme/aa.com/aa.com.key;

#ssl性能调优
#nginx 1.13.0支持了TLSv1.3,TLSv1.3相比之前的TLSv1.2、TLSv1.1等性能大幅提升
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
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优化https下Nginx的性能
ssl_session_cache builtin:1000 shared:SSL:10m;
#OCSP Stapling 开启。OCSP是用于在线查询证书吊销情况的服务,使用OCSP Stapling能将证书有效状态的信息缓存到服务器,提高 TLS 握手速度
#ssl_stapling on;
#OCSP Stapling 验证开启
#ssl_stapling_verify on;

如果报缺失中间证书,则需要把cer文件换成fullchain.cer

fullchain.cer #服务端完整证书,包含证书链
为某个软件配备证书的时候一定要把整个证书链配置完全,否则有可能会出现证书不被信任的情况。我们只需要知道要用的是fullchain.cer与aa.com.key就行了。

 

即:

ssl_certificate /dnmp/services/nginx/ssl/acme/aa.com/fullchain.cer;
ssl_certificate /dnmp/services/nginx/ssl/acme/aa.com/aa.com.key;

设置 crontab 任务自动续签(可不设置)

运行 crontab -e 来编辑 crontab 文件,添加如下内容,保存即可。

10 0 * * * docker exec acme.sh --cron   # acme.sh为容器名,每天0点10分执行

 

posted @ 2020-07-18 13:15  一个人的孤独自白  阅读(3810)  评论(0编辑  收藏  举报