acme.sh申请Let‘s encrypt泛域名证书Docker化部署
acme.sh申请Let's encrypt泛域名证书Docker化部署
- 一:手动安装acme.sh
- 二:申请证书
- 2.1 DNSAPI申请方式
- 2.2 DNS手动校验方式
- 2.3 HTTP校验方式申请
- 2.4 无80端口申请证书
- 2.5 证书续签
- 三:Docker部署acme.sh申请证书
- 3.1 安装docker-compose
- 3.2 启动容器
- 3.3 申请证书
- 3.4 设置 crontab 任务自动续签
- 四:nginx配置
一:手动安装acme.sh
本次测试系统为:Ubuntu16.04
curl https://get.acme.sh | sh
# 也可以使用wget方式:wget -O - https://get.acme.sh | sh
source ~/.bashrc
然后可以执行下面的命令获取 acme.sh 更新,并设置之后都自动更新 acme.sh 脚本
acme.sh --upgrade --auto-upgrade
二:申请证书
使用acme.sh有三种申请方法
- 使用HTTP校验方式申请证书
- 使用DNS手动校验方式申请证书
- 使用DNSAPI校验方式申请证书
2.1 DNSAPI申请方式
github上的How to use DNS API
下面以godaddy域名为例申请泛域名证书,方式需要先获取godaddy账号的API信息,获取地址
申请完成后记录下Key与Secret,然后在命令行导入key与secret
export GD_Key="xxxxxxxxxxxxxxxxxxxxxxx"
export GD_Secret="xxxxxxxxxxxxxxxxxxxx"
# 上面的信息会保存在 .acme.sh/account.conf配置文件中
# 注意:GD_Key, GD_Secret根据域名商的不同而不一样,具体见github
导入完成后开始申请域名证书:
acme.sh --issue --dns dns_gd -d example.com -d '*.example.com' # dns_gd这个参数根据域名商不同会不一样
...............................................................
# 该命令执行完成后,会显示证书所在的路径
# 证书保存路径:~/.acme.sh
nginx的配置:
server {listen 443;server_name task.example.com;root /wwwroot/task/front-web;access_log logs/task.access.log main;error_log logs/task.error.log error;# 修改下面两行代码后面的证书路径即可ssl_certificate /home/ubuntu/.acme.sh/example.com/fullchain.cer;ssl_certificate_key /home/ubuntu/.acme.sh/example.com/example.com.key;location / {index index.html index.htm;}............................
}
server {listen 80;server_name task.inve.one;if ($host = task.inve.one) {return 301 https://$host$request_uri;}
}
2.2 DNS手动校验方式
通配符证书,英文 Wildcard Certificate 国内黑话叫做野卡,经过一个月的跳票后,Let’s Encrypt 目前已经支持通配符的证书,同样 acme.sh 也是支持的,和多域名证书不同,通配符证书必须使用 DNS TXT 记录验证方式
acme.sh --issue -d example.com -d '*.example.com' --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please
[Tue Mar 20 16:34:35 HKT 2018] Domains have changed.
[Tue Mar 20 16:34:35 HKT 2018] Registering account
[Tue Mar 20 16:34:36 HKT 2018] Registered
[Tue Mar 20 16:34:36 HKT 2018] ACCOUNT_THUMBPRINT='blablablabla'
[Tue Mar 20 16:34:36 HKT 2018] Multi domain='DNS:example.com,DNS:*.example.com'
[Tue Mar 20 16:34:36 HKT 2018] Getting domain auth token for each domain
[Tue Mar 20 16:34:38 HKT 2018] Getting webroot for domain='example.com'
[Tue Mar 20 16:34:38 HKT 2018] Getting webroot for domain='*.example.com'
[Tue Mar 20 16:34:38 HKT 2018] Add the following TXT record:
[Tue Mar 20 16:34:38 HKT 2018] Domain: '_acme-challenge.example.com'
[Tue Mar 20 16:34:38 HKT 2018] TXT value: 'blablablabla1'
[Tue Mar 20 16:34:38 HKT 2018] Please be aware that you prepend _acme-challenge. before your domain
[Tue Mar 20 16:34:38 HKT 2018] so the resulting subdomain will be: _acme-challenge.example.com
[Tue Mar 20 16:34:38 HKT 2018] Add the following TXT record:
[Tue Mar 20 16:34:38 HKT 2018] Domain: '_acme-challenge.example.com'
[Tue Mar 20 16:34:38 HKT 2018] TXT value: 'blablablabla2'
[Tue Mar 20 16:34:38 HKT 2018] Please be aware that you prepend _acme-challenge. before your domain
[Tue Mar 20 16:34:38 HKT 2018] so the resulting subdomain will be: _acme-challenge.example.com
[Tue Mar 20 16:34:38 HKT 2018] Please add the TXT records to the domains, and re-run with --renew.
[Tue Mar 20 16:34:38 HKT 2018] Please add '--debug' or '--log' to check more details.
[Tue Mar 20 16:34:38 HKT 2018] See: https://github.com/Neilpang/acme.sh/wiki/How-to-debug-acme.sh
接着你需要给 _acme-challenge.example.com 增加两个 TXT 记录 “blablablabla1” 和 “blablablabla2”,然后等 DNS 生效(两个TXT值在上面的命令中输出了)
检查是否生效:
root@example ~ # dig TXT _acme-challenge.example.com @9.9.9.9 +short
"blablablabla1"
"blablablabla2"
TXT记录生效后才能申请证书:
root@example ~ # acme.sh --renew -d example.com -d '*.example.com' --force --yes-I-know-dns-manual-mode-enough-go-ahead-please
[Tue Mar 20 16:41:25 HKT 2018] Renew: 'example.com'
[Tue Mar 20 16:41:26 HKT 2018] Multi domain='DNS:example.com,DNS:*.example.com'
[Tue Mar 20 16:41:26 HKT 2018] Getting domain auth token for each domain
[Tue Mar 20 16:41:26 HKT 2018] Verifying:example.com
[Tue Mar 20 16:41:29 HKT 2018] Success
[Tue Mar 20 16:41:29 HKT 2018] Verifying:*.example.com
[Tue Mar 20 16:41:32 HKT 2018] Success
[Tue Mar 20 16:41:32 HKT 2018] Verify finished, start to sign.
[Tue Mar 20 16:41:33 HKT 2018] Cert success.
-----BEGIN CERTIFICATE-----
# 这里是证书文件
-----END CERTIFICATE-----
[Tue Mar 20 16:41:33 HKT 2018] Your cert is in /root/.acme.sh/example.com/example.com.cer
[Tue Mar 20 16:41:33 HKT 2018] Your cert key is in /root/.acme.sh/example.com/example.com.key
[Tue Mar 20 16:41:33 HKT 2018] The intermediate CA cert is in /root/.acme.sh/example.com/ca.cer
[Tue Mar 20 16:41:33 HKT 2018] And the full chain certs is there: /root/.acme.sh/example.com/fullchain.cer
[Tue Mar 20 16:41:33 HKT 2018] It seems that you are using dns manual mode. please take care: The dns manual mode can not renew automatically, you must issue it again manually. You'd better use the other modes instead.
[Tue Mar 20 16:41:33 HKT 2018] Call hook error.
2.3 HTTP校验方式申请
HTTP校验方式需要申请的域名80端口可以访问
# www.example.com必须可以正常访问,否则无法通过校验
acme.sh --issue -d example.com -d *.example.com -w /wwwroot/www/example
2.4 无80端口申请证书
如果你本地没有装任何 Web 服务器软件,或者你的 Web 服务器软件并没有监听 TCP 80 端口,那么可以用 Standalone 方式直接获取多域名证书,注意以下操作必须使用 root 或 sudo 切换
我们以 example.com / www.example.com / subdomain.example.com 这三个域名为例
首先,你需要把这三个域名都解析到你的服务器 IPv4 上,并且确保你的服务器可以访问公网,无法访问公网的内网服务器是不行的
另外,你也可以给 example.com 增加一个 CAA 记录为 0 issue “letsencrypt.org” 这样可以告诉 Let’s Encrypt 的 CA ,你授权给他们签发 SSL 证书
acme.sh --issue --standalone -d example.com -d www.example.com -d subdomain.example.com
通过这个方式,即可为 example.com www.example.com 和 subdomain.example.com 三个域名签发一张多域名证书
2.5 证书续签
安装了ACME后,它会添加一个自动任务到你服务器的Cron里,每天都会检查你的Let’s Encrypt免费泛域名证书是否快要过期,ACME会自动帮你续签。
ubuntu@ip-172-31-31-252:~$ crontab -l
....................................
12 0 * * * "/home/ubuntu/.acme.sh"/acme.sh --cron --home "/home/ubuntu/.acme.sh" > /dev/null
三:Docker部署acme.sh申请证书
Docker在ubuntu上的安装见:Docker(一):安装Dodcker
3.1 安装docker-compose
可以不安装docker-compose,使用命令行直接启动容器,为了方便管理,这里以docker-compose来启动docker
安装方式一:
先下载docker-compose二进制文件
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
赋予该文件可执行权限
sudo chmod +x /usr/local/bin/docker-compose
最后检查docker-compose是否安装成功
docker-compose --version
docker-compose version 1.23.1, build 1719ceb
安装方式二:
# 没有pip,需要先安装pip
pip install docker-compose
3.2 启动容器
这里以阿里云域名做为演示,docker-compose文件如下:
version: "3"
services:acme.sh:image: neilpang/acme.shcontainer_name: acme-chainfinrestart: alwayscommand: daemonenvironment:- Ali_Key=xxxxxxxx- Ali_Secret=xxxxxxxxxxvolumes:- /data/acme_docker/chainfin.online:/acme.shnetwork_mode: host
Ali_Key,Ali_Secret为阿里云账号API的accesskey
保存后在 docker-compose.yml 同目录下运行如下命令启动 acme.sh。如果更改了 docker-compose.yml 文件,只要在此运行如下命令,就能够更新到最新状态。
docker-compose up -d
3.3 申请证书
sudo docker exec acme-chainfin --issue --dns dns_ali -d example.com -d '*.example.com' --keylength ec-384
3.4 设置 crontab 任务自动续签
运行 crontab -e 来编辑 crontab 文件,添加如下内容,保存即可
*/10 0 * * * docker exec acme.sh --cron # acme.sh为容器名
四:nginx配置
设置域名www.example.com与example.com都跳转到https://www.example.com
server {listen 80;server_name example.com www.example.com;rewrite ^/(.*) https://www.example.com/$1 permanent;
}
server {listen 443;server_name example.com;rewrite ^/(.*) https://www.example.com/$1 permanent;ssl_certificate /opt/example.com_ecc/fullchain.cer;ssl_certificate_key /opt/example.com_ecc/example.com.key;}
server {listen 443 default_server ssl;server_name www.example.com;root /application/nginx/html/linker-front/;location / {index index.html index.htm;}access_log /var/log/nginx/linker.access.log main;error_log /var/log/nginx/linker.error.log error;ssl_certificate /opt/example.com_ecc/fullchain.cer;ssl_certificate_key /opt/example.com_ecc/example.com.key;location /admin {alias "/application/nginx/html/linker-manage";}location /linker {proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://172.17.0.1:8082/linker;# 下面三项配置转发websocket请求proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection 'upgrade';}}
acme.sh申请Let‘s encrypt泛域名证书Docker化部署相关推荐
- 通过 acme.sh 申请 Zero SSL 免费泛域名证书
就是白嫖,而且理论上是无限的--中间有些坑,来看看我怎么踩! 如果不是泛域名的,Let's Encrypt.Zero SSL 这类免费证书意义不大,--都去阿里云.腾讯云申请免费一年证书好了. 安装 ...
- acme.sh申请Let‘s Encrypt 免费HTTPS证书
1.安装acme.sh(新的操作流程已更新,更新时间2022-10-14) 该文档基于ubuntu 20.04操作,基本大同小异,这里附上官方文档供对比参考,如果出现其他问题的可以邮箱留言 14067 ...
- Let's Encrypt 泛域名证书申请
泛域名 泛域名证书又名通配符证书是SSL证书中的其中一种形式,一般会以通配符的形式(如:*.domain.com)来指定证书所要保护的域名. OV证书和DV证书都会有通配符的域名形式提供,而EV证书一 ...
- 群晖 Let's Encrypt 泛域名证书自动更新
本文转载自:http://www.up4dev.com/2018/05/29/synology-ssl-wildcard-cert-update/,本站转载出于传递更多信息之目的,版权归原作者或者来源 ...
- 申请免费的国产泛域名证书
1. 申请免费泛域名证书 云服务商提供的免费证书一般都是单独域名证书,对于泛域名(也可以称为子域名.通配符域名)支持的较少.如果想要使用免费的泛域名,则需要付费购买或者使用Let's Encrypt等 ...
- sdm 使用阿里云域名申请 Let’s Encrypt 通配符 域名证书
安装acme 进入 套件中心 点击安装 Git Server 之后进入SSh会使用git命令 方法1--------------------------------------- 获取代码 git c ...
- Let‘sEncrypt快速颁发及自动续签泛域名证书实践指南
文章目录 0x00 前言简述 0x01 快速安装配置 1.acme.sh 0x02 证书自动签发实践 1.acme.sh + Cloudflare 实现自动签发泛域名证书. 0x03 使用实例 1.简 ...
- Rocky(Centos)使用acme.sh申请安装Let‘s Encrypt泛域名ECC证书(阿里DNS)
现代的浏览器开始有将 https 访问作为默认访问方式的倾向,因此需要将网站配置为https 访问. Let's Encrypt 组织提供免费的 TLS 加密证书,用于协助web服务器实现https协 ...
- acme.sh申请免费SSL证书,泛域名证书,多域名证书
acme.sh可以通过acme协议生成Let's Encrypt颁发的SSL证书. Let's Encrypt 提供了单域名证书,泛域名证书和多域名证书 0.GitHub地址 1.在线安装 curl ...
最新文章
- %matplotlib inline %config InlineBackend.figure_format = “retina为了将图片嵌入notebook及提高分
- 动态行和列的表格,展现方式
- html页面获取服务器时间,[html]定时获取服务器时间和本地时间
- 用netsh自动切换IP
- 65.4. Other GUI - phpOraAdmin
- dcdc芯片效率不高的原因_研学丨燃料电池车的典型效率及能耗
- redis将散裂中某个值自增_Redis总结
- Ajax.Net之数据类型
- 【django小练习之主机管理界面】
- cookie.setValue一些注意事项
- 第三方登录—QQ登录
- 大数据系列之知识点总结和企业级游戏行业架构设计
- 【P4lang】什么是P4?
- c语言如何计算出迭代次数,计算方法——C语言实现——迭代法求解线性方程组...
- 计算机反求设计的一般步骤,逆向设计的概念和基本步骤
- 动态规划解决贴纸拼字游戏
- 中国财团收购Opera 为什么要美国监管部门同意?
- PCI DSS安全评估简介
- 《三体》-- 刘慈欣
- 海苔和紫菜有什么区别?
热门文章
- 12306火车票查询——Python
- Excel如何将多行数据合并为一行并添加间隔符号
- Keil中部分Error Warning解决方法记录
- 网络安全进阶篇之免杀(十四章-9)MSF加密壳免杀过360
- IDEA运行java出现“不支持发行版本XX”
- win11登不上微软账号
- Zookeeper:Zookeeper的主从选举机制
- MySQL学习笔记数据库学习【二】
- NLP专题直播 | Transformer, BERT, ALBERT, XLNet全面解析(ALBERT第一作者亲自讲解)
- Google Earth Engine(GEE)——Python干旱严重程度案例分析