1. 前言
当时测试好了的时候,忘记写文章了,现在是补的,我也不能再来一遍,只能网上找点资料,然后凭记忆写一下,当个备忘
2. 步骤
2.1. 安装acme.sh
curl https://get.acme.sh | sh
安装完毕后,刷新环境变量,然后输入“ acme.sh ”,看看会不会报错,不会的话就没有问题
source ~/.bash_profile ~/.bashrc # 刷新环境变量
2.2. 域名解析
需要先在阿里云新建一个授权用户,
然后该用户有权限增删改查dns解析
然后获取到key和secret,替换下面的参数
# 替换成从阿里云获取的 API 参数
export Ali_Key="666"
export Ali_Secret="666"
# 换成自己的域名
acme.sh --issue --dns dns_ali -d ujuji.com -d *.ujuji.com
这里我们是增加了泛解析“*.ujuji.com”,但是使用泛解析,需要有一个根,也即前面的“-d ujuji.com”
这样我们就获取到了证书(如果前面步骤没错的话)
Nginx还需要配置,以上只是获取到证书了,下面需要颁发证书:
acme.sh --installcert -d xxx.com \
--key-file /usr/local/nginx/conf/ssl/xxx.com/xxx.com.key \
--fullchain-file /usr/local/nginx/conf/ssl/xxx.com/xxx.com.cer
上面的两个两个路径就是你的正要放的路径,而不是已经申请到的路径(默认的是~/.acme.sh/xxxx)
唯一需要注意的是,就是xxx.com
是你上一步申请到的域名
[Sat Oct 10 17:59:56 CST 2020] Installing key to:/usr/local/nginx/conf/ssl/xxx.comxxx.com.key
[Sat Oct 10 17:59:56 CST 2020] Installing full chain to:/usr/local/nginx/conf/ssl/xxx.com/xxx.com.cer
如果没报错的话,就会显示如上的提示,这样证书就被复制到了/usr/local/nginx/conf/ssl/
这样做的好处就是可以自动更新ssl
2.3. Nginx配置
这里附上Nginx的参考配置:
server {
listen 443 ssl http2;
server_name www.blestgirl.top;
ssl_certificate vhosts/***.fullchain.cer; #通过acme申请的位置,上一步最好会告诉你(绿色显示)
ssl_certificate_key vhosts/***.key;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
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 /usr/share/nginx/html;
index index.html index.htm;
}
location ~ \.php$ {
root /var/www/html;
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;
include fastcgi_params;
}
}
另外,需要说的是,如果你使用的是宝塔的话,那么:
生成的fullchain.cer
对应宝塔需要的证书(PEM格式)
生成的xx.xx.key
对应宝塔需要的密钥(KEY)
2.4. 自动更新
由于let's 的证书协议极易更新,导致acme工具不能正常使用,而导致续签失败,所以可以自动更新:
acme.sh --upgrade --auto-upgrade