ACME.SH 申请SSL证书(免费、自动更新)

1. 获取DNS密钥

(1)获取域名服务商AccessKey ID及AccessKey Secret

我使用的域名是阿里云,故需要去阿里云RAM管理平台获取:

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

阿里云参考文档:如何获取AccessKey ID和AccessKey Secret - 阿里云ACME.SH 申请SSL证书(免费、自动更新)_第1张图片如何获取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 [email protected]

“证书申请”过程中,出现如下错误:

acme.sh --register-account -m [email protected]

ACME.SH 申请SSL证书(免费、自动更新)_第2张图片

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

解决办法:

##注意[email protected] 为你的个人邮箱,记得替换
acme.sh  --register-account  -m [email protected] --server zerossl

成功。然后再次执行证书申请代码。


 

问题二:Adding txt value......

“证书申请”过程中出现如下错误:

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

ACME.SH 申请SSL证书(免费、自动更新)_第3张图片

 这是因为你的域名和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

你可能感兴趣的:(Nginx,https,ssl,linux,acme.sh)