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
然后一切没问题返回出来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)/out
,run
命令执行时的根目录中的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就行了。
为某个软件配备证书的时候一定要把整个证书链配置完全,否则有可能会出现证书不被信任的情况。我们只需要知道要用的是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分执行