Web服务器-https证书自动轮询

134 阅读4分钟

作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

我们上一大章介绍了Kubernetes的知识,本章节我们进入中间件的讲解,这里会包含很多不同的类型组件,中间件的第一个大类我这里定义的是Web服务器。由于目前使用最广泛的Web服务器是Nginx,所以我们这里的讲解主要以Nginx服务器为主。

虽然我们上一小节已经完成的https的证书申请和配置,但是对于一生要强的运维来说,自动化是毕生的追求,所以我们必须实现自动化。

Let's Encrypt是一个于2015年三季度推出的数字证书认证机构,旨在以自动化流程消除手动创建和安装证书的复杂流程,并推广使万维网服务器的加密连接无所不在,为安全网站提供免费的SSL/TLS证书(资料来源百度百科)。以前我记得是手动申请,这个自动化我还是第一次实操。

1.安装工具

# 启用 EPEL 仓库
yum install epel-release -y
# CentOS 7 使用 Python 2 版本
yum install certbot python2-certbot-nginx -y  certbot --version | grep nginx
#如果输出中包含 nginx,表示插件已安装成功

2.自动申请证书

certbot --nginx -d chenhong.fun
  • 按照提示操作(输入邮箱、同意协议、选择是否强制跳转 HTTPS)。

  • Certbot 会自动修改 Nginx 配置并申请证书,但是由于这个需要你的网站支持http访问,由于备案原因,我这个不支持,所以暂时无法实现。验证的时候他会来访问类型下面的地址。

    chenhong.fun/.well-known…

3.手动申请证书(DNS验证方法)

他会要求你到域名控制台去添加一个TXT记录,TXT记录不影响现有解析。具体添加的内容参考命令输出,就是下面红框部署。

certbot certonly \
--manual \
--preferred-challenges \
dns -d chenhong.fun

添加记录

这里2条TXT记录其中一条是前面申请阿里云的免费证书自动添加的,一条是我手动添加的。

当域名解析生效以后,按回车继续(就会有如下的提示)。

Press Enter to Continue
Waiting for verification...
Cleaning up challenges
Subscribe to the EFF mailing list (email: dan.dessler@163.com).
Starting new HTTPS connection (1): supporters.eff.org

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/chenhong.fun/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/chenhong.fun/privkey.pem
   Your certificate will expire on 2025-07-08. To obtain a new or
   tweaked version of this certificate in the future, simply run
   certbot again. To non-interactively renew *all* of your
   certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

生成的证书文件,如下图。

4.手工申请证书(本地文件方法法)

具体目录以现场配置的静态路径为准,后面的目录是固定的,生成的内容和刚才的类似,不过由于我刚使用DNS验证方法已经申请过证书,所以这里重复申请会提示覆盖操作。

mkdir -p /home/static/.well-known/acme-challenge

server {
    listen 80;
    server_name chenhong.fun;
    
    location /.well-known/acme-challenge {
        root /var/www/html;
        allow all;
    }
    
    location / {
        return 301 https://$host$request_uri;  # 其他请求跳转 HTTPS
    }
}

certbot certonly \
--webroot \
-w /home/static  \
-d chenhong.fun

当然还有通过自动修改dns的方法,这个就是使用api去调用域名的解析记录,实现自动解析域名。

配置成功以后,通过浏览器访问网站,检查证书信息,可以看到证书的办法机构已经是我们预期的Let's Encryp。

由于网络的原因我们没有实现自动化及轮询,其实我们也可以手工实现的,通过任务计划的方式来实现。但是要考虑请求频率的问题,避免你的申请被封。

通过以上验证方法,我们正常申请证书的验证方法就是DNS的TXT记录验证和文件访问验证,无论免费还是收费都是这2个方法。

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

关注微信公众号《运维小路》获取更多内容。