Bootstrap

使用Let‘s Encrypt、Certbot配置Centos下Nginx的HTTPs证书

期望通过每一次分享,让技术的门槛变低,落地更容易。 —— 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

最后访问你的域名,对应即可。

;