ACME.SH 申请SSL证书 于更新(转)

1. 获取DNS密钥
(1)获取域名服务商AccessKey ID及AccessKey Secret
我使用的域名是阿里云,故需要去阿里云RAM管理平台获取:

其他服务商,可以去指定的服务商控制台获取。

阿里云参考文档:如何获取AccessKey ID和AccessKey Secret - 阿里云如何获取AccessKey ID和AccessKey Secret - 阿里云

记住APPID和APPSecret

2. 安装与申请
(1)安装ACME
curl https://get.acme.sh | sh
 
source ~/.bashrc
如果使用root用户进行安装,会生成文件夹.acme.sh。

文件夹地址:/root/.acme.sh

(2) 设置ACME自动更新
acme.sh --upgrade --auto-upgrade
3. 证书申请
        申请过程中,请先关闭nginx

(1)设置阿里云APPID 和阿里云APPKEY
##注:此处的APPID 和APPkey为第一步我们从阿里云RAM中获取的
export Ali_Key="Key_XXX"
export Ali_Secret="Secret_XXX"
 (2)申请证书(通配符)
acme.sh --issue --dns dns_ali -d abc.com -d *.abc.com
申请成功会在.acme.sh文件夹下面,生成abc.com文件夹 ,并且证书会存储在文件夹下

注:

1. 证书申请过程较慢,大概会持续1~2分钟左右,注意不要进行其他操纵。申请成功后会显示“success”.

2. 如SSH控制台操作卡顿,是正常现象,一会儿就好了,等一会。

3. 证书申请过程如果出现问题,记得查看文中“常见问题”,进行修正。

(3) 导出证书
##创建证书导出路径
mkdir /data/cert/abc.com/
 
##证书导出脚本
acme.sh --install-cert -d abc.com --cert-file /data/cert/abc.com/abc.com.crt --key-file /data/cert/abc.com/abc.com.key --fullchain-file /data/cert/abc.com/fullchain.crt
 
## 重启nginx
service nginx force-reload
 
# nginx  force-reload 报错替代方案
# service nginx stop
# service nginx start
注:

1. 记得修改脚本中的路径和证书名称。

2. 如果“service nginx force-reload”报错,可以查看“常见问题3”进行解决

4.Nginx 配置HTTPS证书
nginx安装步骤我就不做说明了,没有安装过的自己去看吧

nginx安装教程:

linux搭建nginx_svallll的博客-CSDN博客_linux搭建nginx

nginx安装SSL模块:

Nginx 的 SSL 模块安装_浮_雲的博客-CSDN博客_nginx安装ssl模块

nginx安装fair插件,进行多服务器负载均衡:(可选,非必要)

Nginx安装SSL证书_love_yu_er的博客-CSDN博客_nginx安装证书

注:由于https会使用到443端口,服务商安全组记得打开443端口

(一):编辑nginx.conf
server {
        listen    443 ssl;
        server_name  www.abc.com;
        ssl_certificate /data/cert/abc.com/fullchain.crt;
        ssl_certificate_key /data/cert/abc.com/abc.com.key;
        ssl_trusted_certificate /data/cert/abc.com/fullchain.crt;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;
        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout 10m;
        
 
        location / {
           # root   "/home/www/www.abc.com";
            root   html;
            index  index.html index.htm;
            proxy_pass http://127.0.0.1:37521/;
            proxy_set_header X-real-ip $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
 
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
 
    }
    
    
    ##80端口默认重定向到443端口
    server {
        listen    80;
        server_name  www.abc.com;
        # 核心代码
        rewrite ^(.*)$ https://${server_name}$1 permanent;
    }

注:以abc.com域名为例,acme.sh生成的文件包含abc.com.crt ; abc.com.eky ; fullchain.crt;

这里nginx配置ssl域名不要使用abc.com.crt作为密钥,否则会导致证书不全等异常,需要使用fullchain.crt

(二):设置防火墙放行443端口

以下脚本只针对于Centos7及以上,其他版本请查找其他放行方法:

##打开防火墙,如果已经打开了,就不用管了
systemctl start firewalld
 
##放行443端口
firewall-cmd --zone=public --add-port=443/tcp --permanent
 
##重启放获取
firewall-cmd --reload
5.ACME更新
此方法SSL证书默认有效期是90天,好处在于此方法默认是一个月更新一次证书。

但是由于ACME更新较快,所以记得更新ACME。

## acme.sh 更新
## 目前由于 acme 协议和 letsencrypt CA 都在频繁的更新, 因此 acme.sh 也经常更新以保持同步.
## 升级 acme.sh 到最新版 :
 
##手动升级。如果你不想, 可以开启自动升级:
acme.sh --upgrade
 
##自动更新:
##acme.sh 就会自动保持更新了.
acme.sh  --upgrade  --auto-upgrade
 
##关闭自动更新
acme.sh --upgrade  --auto-upgrade  0
6. 手动更新ACME证书(证书过期使用)
单域名更新方法

acme.sh --renew -d www.xxx.com --force
或 通配符更新方法

acme.sh --renew -d xxx.com -d *.xxx.com --force
注意过程可能再次出现DNS错误,这里可以查看常见问题二的解决方法

注意:这里要执行上面的renew来覆盖更新证书,而不是申请,别弄错了

证书更新玩后,需要重启nginx

nginx -s reload
7. 常见问题
以下是申请过程-常见错误说明:(未出现错误,跳过此段)

问题一:acme.sh --register-account -m my@example.com
“证书申请”过程中,出现如下错误:

acme.sh --register-account -m my@example.com

出现错误是因为没有注册acme账号,需要执行脚本进行账号申请

解决办法:

##注意test@abc.com 为你的个人邮箱,记得替换
acme.sh  --register-account  -m test@abc.com --server zerossl
成功。然后再次执行证书申请代码。


 

问题二:Adding txt value......
“证书申请”过程中出现如下错误:

Adding txt value: W9IRKarSz7S1RKS8goMFDOK1dGDEjP4PLGuxNjXIUY4 for domain:  _acme-challenge.abc.com

 这是因为你的域名和DNS密钥不在一个服务商

解决办法:

重新执行part1,去你域名指定的服务商去查看,拿到后,再次执行下面代码

##注:此处的APPID 和APPkey为第一步我们从阿里云RAM中获取的
export Ali_Key="Key_XXX"
export Ali_Secret="Secret_XXX"
同时进入/root/.acme.sh目录,修改Ali_Key和ALI_Secret

vi account.conf
修改完记得wq保存。然后再次执行证书申请代码。

问题三:nginx 出现. env: /etc/init.d/redis: Permission denied
解决办法:env: /etc/init.d/redis: Permission denied_极客on之路-CSDN博客

问题四: Failed to reload-or-try-restart nginx.service: Unit not found
解决办法:添加 Nginx 为系统服务(service nginx start/stop/force-reload)_weixin_34279579的博客-CSDN博客

问题五:中间证书缺少,浏览器可以正常访问,接口PKI bulid faild,小程序电脑可以打开,手机打不开等等...
报错:PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilder.

报错:微信小程序服务端-电脑端可以访问,手机不能访问

检测:

检测SSL证书是否出现错误:中间证书缺少

检测地址:SSL服务器证书安装检查器_OPENSSL工具包_迅通诚信

解决办法:(nginx)

ssl_certificate /data/cert/abc.com/fullchain.crt;
ssl_certificate_key /data/cert/abc.com/abc.com.key;
ssl_trusted_certificate /data/cert/abc.com/fullchain.crt;
 注意:这里ssl_certificate 配置由原本的abc.com.crt 变成fullchain.crt了,同时配置ssl_trusted_certificate 信任证书

重启nginx

nginx -s reload


原文链接:https://blog.csdn.net/fyhju1/article/details/120452141 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值