1、安装 免费自动签名工具
1 2 3 4 5 6 7 8 9 |
curl https://get.acme.sh | sh 如果使用root用户进行安装,会生成文件夹.acme.sh 文件夹地址:/root/.acme.sh source ~/.bashrc #设置ACME自动更新 acme.sh --upgrade --auto-upgrade |

1.1 创建证书存放目录(根据自己目录自行创建)
1 |
mkdir -p /usr/local/nginx/sslkey/9l988.com |
1.2 在文件系统中定义 webroot 目录。对于当前这个例子,我将使用/var/www/le_root. 鉴于我安装acme.sh到 root 用户,让我们也更改权限,以便 nginx 可以访问该目录。
1 2 |
mkdir -p /var/www/le_root/.well-known/acme-challenge chown -R root:www /var/www/le_root |
1.3 现在进入 nginx 配置本身。一个简单的location规则就可以完成这项工作,但不是在所有虚拟主机中复制该规则,而是让我们在其中创建一个单独的文件
/usr/local/nginx/conf/includes/letsencrypt-webroot 并按需包含它:
参考:https://www.rmedgar.com/blog/using-acme-sh-with-nginx/
1 |
mkdir -p /usr/local/nginx/conf/includes/ |
1 |
vim /usr/local/nginx/conf/includes/letsencrypt-webroot |
1 2 3 |
location /.well-known/acme-challenge/ { alias /var/www/le_root/.well-known/acme-challenge/; } |
1.4 现在在nginx配置文件中配置一下
1 |
vim /usr/local/nginx/conf/nginx.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
server { listen 80; server_name 9l988.com; include includes/letsencrypt-webroot; location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } |

注意:如果签发机器和业务机器不在同一台机器,则可以做如下处理。(此操作只是让证书顺利签发,因为域名解析不在同一机器或无法访问是无法签发的)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
配置这一项就是为了在申请证书的时候,acme能访问到签发服务器的文件,且不会影响原域名业务,如果业务不在同一台机器,则业务机器需要添加一个location反代到签发机器,反代内容如下 #反代一定要是80 不可以是443否则不成功,当然你也可以做301跳转到443 location /.well-known/acme-challenge/ { proxy_pass http://aws.aaa.com:80/; } #签发机器配置如下 server{ listen 80; server_name aws.aaa.com; location /.well-known/acme-challenge/ { alias /var/www/le_root/.well-known/acme-challenge/; } } |
1.5 重新加载nginx:
1 |
nginx -s reload |
1.6 开始颁发证书
一旦配置了 nginx,我们就可以开始颁发证书(如下签发方式是文件验证方式):
1 2 3 4 5 6 7 8 |
#请注意,在示例中,我为 mydomain.com 和 www.mydomain.com 创建了证书,多个子域名-d分割即可 ./acme.sh --issue -d max.9l988.com -d aws.9l988.com -w /var/www/le_root -m 6666@gmail.com -k 4096 #ecc ./acme.sh --issue -d max.9l988.com -d aws.9l988.com -w /var/www/le_root -m 6666@gmail.com -k ec-256 #更换其他颁发证书机构https://github.com/acmesh-official/acme.sh/wiki/Server ./acme.sh --issue -d max.9l988.com -d xxx.9l988.com -w /var/www/le_root -m gang.wang@ccc.com -k 4096 --server zerossl |
参数解析:
1 2 3 4 |
--issue: 颁发新证书。 -w /DocumentRootPath/:指定 Web 根模式的 Web 根文件夹。 -d example.com:指定一个域,用于发布、更新或撤销等。可以多次使用。 -k 2048:指定域密钥长度。 |

1.7 nginx使用(自行解决)
1 2 |
ssl_certificate /usr/local/nginx/sslkey/9l988.com/fullchain.cer; ssl_certificate_key /usr/local/nginx/sslkey/9l988.com/dev.yxb.xiaozikeji.com.key; |
1.8 执行安装
使用 acme.sh 安装证书将创建一个 cron 作业,该作业将自动更新证书并将相关文件复制到您在安装命令中提供的位置。 此外,您还可以指定重新加载服务器配置的命令。
假设我们将文件存储在 /etc/nginx/certs/mydomain.com 目录中( mydomain.com 目录必须事先创建),那么命令将是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
./acme.sh --install-cert -d max.9l988.com \ --key-file /usr/local/nginx/sslkey/9l988.com/private.key \ --ca-file /usr/local/nginx/sslkey/9l988.com/ca.crt \ --cert-file /usr/local/nginx/sslkey/9l988.com/cert.crt \ --fullchain-file /usr/local/nginx/sslkey/9l988.com/fullchain.crt or #推荐 ./acme.sh --install-cert -d max.9l988.com \ --key-file /usr/local/nginx/sslkey/9l988.com/9l988.com.key \ --fullchain-file /usr/local/nginx/sslkey/9l988.com/9l988.com.crt \ --reloadcmd "systemctl reload nginx" 现在文件被复制并创建了 cron 作业。默认情况下,证书每 80 天更新一次。 剩下的步骤是配置虚拟主机以使用 SSL/TLS。可以在官方 nginx 文档中找到这方面的指南,并记住在完成后重新加载服务器。 |
1 2 3 4 5 6 7 8 |
--install-cert: 将颁发的证书安装到 nginx 服务器 -d theos.in: 指定域,用于发布、更新或撤销等 --key-file /etc/nginx/ssl/theos.in/theos.in.key:发布/更新后,密钥将被复制到此路径 --fullchain-file /etc/nginx/ssl/theos.in/theos.in.cer:发布/续订后,全链证书将被复制到此路径。 --reloadcmd 'systemctl reload nginx': issue/renew 后,用于重新加载服务器 #acme官方文档 https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E |
nginx使用证书文件(与供应商证书使用方式完全一致)
1 2 |
ssl_certificate /usr/local/nginx/sslkey/9l988.com/fullchain.crt; ssl_certificate_key /usr/local/nginx/sslkey/9l988.com/private.key; |
2、DNS模式签发证书
2.1 首先要设置你所使用的服务商dns (本人这里使用dnspod,此种方式不需要配置nginx配置,也不需要域名解析到某个ip)
(1)设置dnspod APPID 和APPKEY
1 2 |
#DNS模式申请(先要设置所使用dns代理商的token等) 参考:https://github.com/acmesh-official/acme.sh/wiki/dnsapi |
2.1.1、可以修改dns_dp.sh里的DP_Id和DP_Key
1 |
vim dnsapi/dns_dp.sh |
2.1.2、也可以用变量形式赋值DP_Id和DP_Key
1 2 |
export DP_Id="1234" export DP_Key="sADDsdasdgdsf" |
2.2 执行申请
1 |
注意:只有域名dns解析到此账户的域名才可以,其他账户的域名用此账户APPID和key是申请不下来的 |
1 2 3 4 5 |
acme.sh --issue --dns dns_dp -d 9l988.com -w /var/www/le_root -m gang.wang@cctv.com -k 4096 or acme.sh --issue --dns dns_dp -d 9l988.com -m gang.wang@cctv.com -k 4096 |
2.3 执行安装
1 2 3 |
安装证书acme.sh将创建一个 cron 作业,该作业将自动更新证书并将相关文件复制到您在安装命令中提供的位置。此外,您还可以指定重新加载服务器配置的命令。 假设我们将文件存储在/etc/nginx/ssl/目录中(必须事先创建),那么命令将是: |
1 2 3 4 |
acme.sh --install-cert -d 9l988.com \ --key-file /etc/nginx/ssl/9l988.com.key \ --fullchain-file /etc/nginx/ssl/9l988.com.crt \ --reloadcmd "docker exec -it nginx nginx -s reload" |
1 |
现在文件被复制并创建了 cron 作业。默认情况下,证书每 80 天更新一次。 |
- 本文固定链接: https://www.yoyoask.com/?p=9313
- 转载请注明: shooter 于 SHOOTER 发表