- 作者:老汪软件技巧
- 发表时间:2024-09-24 11:03
- 浏览量:
前言:SSL免费证书的有效期从2024年4月底开始从12个月缩短至3个月。对于使用免费SSL证书的中小企业或者个人开发者而言,每三个月去手动部署一次证书文件很容易遗忘,从而导致服务器接口或者网站访问异常,今天把基于阿里云一套自动更新的流程详细写出来。
本系统环境基于阿里云Alibaba Cloud Linux 2.x或3.x LTS 64位(Linux内核本部 kernel 5.10 LTS)
中间件是阿里的tengine(nginx也一样,tengine是在nginx基础上优化的,所有配置文件与nginx一样,不去调优配置文件也比原有的nginx性能提升很多),基于Let‘s Encrypt生产免费的证书。
第一步:安装tengine/nginx (已安装的跳过,直接看第二步)1、 去官网首页下载压缩包,上传服务器/mnt目录下(目录不固定,自己喜好来)
tar -zxvf tengine-3.1.0.tar.gz //解压压缩包
cd tengine-3.1.0 //切到解压后的目录下
sudo yum install -y gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel //安装依赖包
./configure //这里默认安装在/usr/local/nginx目录下,需要指定目录 --prefix==/你的/自定义/路径
sudo make install //编译安装
2、在 /etc/systemd/system/ 目录下创建一个名为nginx.service的文件【下方文本内容里的路径是默认路径,实际可根据前面你自定义的--prefix路径设置】
Description=Tengine HTTP Server
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
3、执行下面命令,重新加载systemd配置以使新服务文件生效
sudo systemctl daemon-reload
4、用vim编辑/usr/local/nginx/conf/nginx.conf文件,server_name域名用自己的替代,这里需要记住证书的路径,后面自动更新证书需要对得上
proxy_cache_path /home/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m;
server {
#SSL 访问端口号为 443
listen 443 ssl;
#填写绑定证书的域名
server_name ~^(?.+)\.**\.com$;
#证书文件名称
ssl_certificate /home/ssl/fullchain.pem;
#私钥文件名称
ssl_certificate_key /home/ssl/key.pem;
ssl_session_timeout 10m;
#请按照以下协议配置
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
}
server {
listen 80;
listen [::]:80;
server_name ~^(?.+)\.**\.com$;
return 301 https://$server_name$request_uri;
}
5、至此nginx安装配置完成,贴出相关命令
#nginx的运行状态
systemctl status nginx
#启动nginx服务
systemctl start nginx
#停止nginx服务
systemctl stop nginx
#重启nginx服务
systemctl restart nginx
#重新读取nginx配置(这个最常用, 不用停止nginx服务就能使修改的配置生效)
systemctl reload nginx
#验证配置文件是否正确
nginx -t
第二步、申请阿里云的密钥,授权DNS管理
登录阿里云,鼠标放到右上角,如图
点击用户名,进入权限设置页面
至此阿里云的权限账号分配,保存好密钥,下面会用到
第三步、安装Let‘s Encrypt下载 /acmesh-offi…上传到/home目录下解压 (目录不固定,自己喜好来)
tar -zxvf acme.sh-master.tar.gz
cd命令切到解压的目录下开始安装,-m是邮箱,写自己的邮箱
./acme.sh --install -m ***@qq.com
查看acme.sh版本
acme.sh --version
添加bash命令,编辑配置文件填入申请的阿里云密钥
alias acme.sh=~/.acme.sh/acme.sh //添加acme bash命令
vi .bashrc //添加阿里云秘钥
source .bashrc //刷新生效
Ali_Key="***" //这里换成上面申请的AccessKey ID
Ali_Secret="***" //这里换成自己的AccessKey Secret
如果没有添加成功,可以在root/.acme.sh目录下,手动添加
找到/root/.acme.sh/account.conf,把SAVED_Ali_Key和SAVED_Ali_Secret换成自己申请的
ACCOUNT_EMAIL='***'
UPGRADE_HASH='='***''
SAVED_Ali_Key='***'
SAVED_Ali_Secret='***'
USER_PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin'
acme.sh --issue --dns dns_ali -d **.com -d www.**.com --keylength ec-256
安装到nginx目录(注意证书的路径,需要和前面nginx配置的路径一致)
acme.sh --install-cert -d www.**.com --key-file /home/ssl/key.pem --fullchain-file /home/ssl/fullchain.pem --reloadcmd "systemctl restart nginx"
以上域名部分换成自己的
在/mnt目录下创建renew_ssl.sh,给予执行权限 chmod 777 文件名
#!/bin/bash
# 设置 acme.sh 的路径和 home 目录
ACME_SH="/root/.acme.sh/acme.sh"
ACME_HOME="/root/.acme.sh"
# 执行 acme.sh 命令进行证书续签
$ACME_SH --cron --home $ACME_HOME > /dev/null
新增定时任务,添加定时任务,每天凌晨1点去申请证书
crontab -e
0 1 * * * /mnt/renew_ssl.sh
至此证书自动颁发完成,需要注意 acmesh-official签发的证书有效期为60天,如果本地没过期并不会去重新申请,也不会执行systemctl restart nginx