期望通过每一次分享,让技术的门槛变低,落地更容易。 —— around
目录
- 1.环境介绍
- 2.acme方式生成证书
- 3.certbot方式生成证书
- 4.配置Nginx
正文
1.环境介绍
操作系统:Centos 7.9
Web服务:Nginx 1.20
域名:hzrcjob.com
第三方客户端:acme.sh v3.0.3 、 Certbot
2.acme方式生成证书
2.1 安装
切换到cd ~
执行脚本下载
curl https://get.acme.sh | sh
见如下信息表示安装成功
成功后可查询版本信息
acme.sh --version
补充一下,安装完成后,所有文件都在该目录下,可能挨个进去看不到
cd /~/.acme.sh/
顺便添加以下映射
alias acme.sh=~/.acme.sh/acme.sh
接着开始生成证书,请记得要先注册一个自己的账号
# -m : 邮件地址
acme.sh --register-account -m [email protected] --server zerossl
如果不做上述操作,会报错如下信息
[root@hzrc01 .acme.sh]# acme.sh --issue -d wx.hzrcjob.com --nginx
[Tue Mar 29 08:50:53 CST 2022] Using CA: https://acme.zerossl.com/v2/DV90
[Tue Mar 29 08:50:53 CST 2022] No EAB credentials found for ZeroSSL, let's get one
[Tue Mar 29 08:50:53 CST 2022] acme.sh is using ZeroSSL as default CA now.
[Tue Mar 29 08:50:53 CST 2022] Please update your account with an email address first.
[Tue Mar 29 08:50:53 CST 2022] acme.sh --register-account -m [email protected]
[Tue Mar 29 08:50:53 CST 2022] See: https://github.com/acmesh-official/acme.sh/wiki/ZeroSSL.com-CA
[Tue Mar 29 08:50:53 CST 2022] Please check log file for more details: /root/.acme.sh/acme.sh.log
3 certbot方式生成证书
3.1 安装
先执行安装插件
yum install epel-release
接着安装snapd
yum install snapd
再设置开机启动
sudo systemctl enable --now snapd.socket
添加软链接并进入目录,安装
sudo ln -s /var/lib/snapd/snap /snap
cd /snap/
sudo snap install core
sudo snap refresh core
执行snap 安装
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
certbot certificates
显示如下信息表示安装成功
3.2 创建泛域名通用证书
正式开始创建证书,创建证书前请确保你的域名dns可以修改,不然不能创建下面依次按照提示完成信息设定:
# -d: 表示需要添加的域名,这里可以指定多个,用空格表示
certbot certonly --preferred-challenges dns --manual -d *.abc.com --server https://acme-v02.api.letsencrypt.org/directory
看到下面的内容,就不要操作了,等待即可。在输出的内容中,找到高亮标记部分,需要到你的域名管理后台添加域名解析记录,记录类型为TXT,名称为第一个标记,值为第二个标记。
建议解析生效后等待5分钟,也可使用以下命令进行验证是否生效
nslookup -qt=TXT <完整txt的url>
之后切换到centos控制台操作“回车”到下一步,接下来输出的内容就是证书路径,以及过期时间,一般有效期为3个月。
创建完成后去目录查看一下,我们会发现是链接形态,后续续期是否还在这里,有待商榷,我们按这里的路径后续配置nginx的证书
3.3 续期证书
剩下的部分就是自己如何使用证书,并设置证书有效期自动续期。
echo "0 0,12 * * * root python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew -q" | sudo tee -a /etc/crontab > /dev/null
或
echo 0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew
手动续期
certbot --force-renewal
注意选择自己需要续期的域名,然后回车即可
4 nginx设置
直接打卡nginx配置文件,设置对应server项,在ssl连接上,额外添加了3个证书的内容,包括引入/etc/letsencrypt/options-ssl-nginx.conf
,如果安装路径不属于原文样子,可以自行查找一下目录,找到映射路径即可。
server {
listen 80;
server_name xxxxx.com;
rewrite ^(.*)$ https://$host$1 permanent;
}
server {
listen 443 ssl;
server_name xxxxxx.com;
ssl_certificate /etc/letsencrypt/live/abc.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/abc.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
完成后执行nginx验证
nginx -t
通过后执行nginx重启
nginx -s reload
最后访问你的域名,对应即可。