certbot 安装、使用教程,快速申请免费的SSL证书! 为了在网站上启用 HTTPS我们需要从证书颁发机构CA获取证书一种文件。 市面上获取证书的方式还是挺多的这次主要给大家介绍一个我平时比较常用的一种免费的方式cerbot操作环境Ubuntu 22.04Nginx使用教程1安装Certbot客户端sudo apt update sudo apt install certbot安装过程我就不放截图了没什么特别的点输入电子邮件地址确认服务条款一路确认即可。2获取免费证书获取方式有好几种我个人比较常用的是 standalone 和 nginx几乎可以覆盖 99% 的使用场景了区别就是要不要停 80 端口的占用。大家看情况选一个用就行了具体如下2.1 standalone 模式这是最简单的如果你有子域名就 -d 跟在后面。比如certbot certonly --standalone -d example.com -d www.example.comexample.com换成你的域名即可。比如域名为 haha.com 那就是certbot certonly --standalone -d haha.com正常情况如果顺利证书和私钥会生成在这。就可以到下一步了。2.2 nginx 模式上面的方法很显然有个问题那就是nginx 得停掉。如果是生产环境肯定是不能接受的。certbot也提供了个插件nginx。安装apt update apt install -y python3-certbot-nginx然后执行certbot plugins看到nginx就OK了然后我们执行生成证书命令certbot certonly --nginx -d example.com同理有子域名就接着 -d www.example.com。example.com 换成你的域名即可。比如域名为 haha.com 然后有个子域名 ab.haha.com 那就是 certbot certonly --nginx -d haha.com -d a.haha.com我以我的 vmeta.space 和 www.vmeta.space 为例2.3 异常情况如果没有成功按我遇到的情况是有两种1. 第一种是报错什么 80端口被占用之类的。这种就只要把占用80端口的东西停了即可我这边是nginx占用了。systemctl stop nginx然后再去生成证书就可以了。记得重启nginx systemctl start nginx2. 第二种是 报错 Connection refused 啥的因为是临时想起来写的所以现在也没有截图这时候你要检查一下你的域名是不是解析到当前服务器。要用域名解析到的那台当前服务器搞这个。然后同样再执行生成证书命令就可以了。两种模式都可以最终看到Successfully就好了。然后记下证书位置。3. 第三种是403。这种情况有两种可能1是如果你域名刚刚解析到某台服务器或者子域名刚解析一条记录那需要等个10来分钟再弄等DNS同步。2是域名备案还没过。这个就是直接访问 http://你的域名比如阿里云的就是这样其他厂商也同理。3验证证书那申请了证书之后我们可以验证一下证书openssl x509 -in /etc/letsencrypt/live/vmeta.space/fullchain.pem \ -noout -text | grep -A1 Subject Alternative Name-in 后面改成你的证书的路径就好了。运行之后如下可以看到DNS里面包含了我的vmeta域名www.。说明OK了。如果你申请了多个子域名在一个证书内也可以看到多个4配置Nginx开启HTTPS现在我们需要在nginx配置一下。找到你的nginx配置文件 nginx.conf如果你是 apt 安装的 nginx那一般是在 /etc/nginx/nginx.conf配置如下配一下证书和私钥的位置。当然 你挪到其他地方也是可以的记得对上位置即可。server { listen 443 ssl http2; server_name jinmo-coder.cn www.jinmo-coder.cn; # 证书 ssl_certificate /etc/letsencrypt/live/jinmo-coder.cn/fullchain.pem; # 私钥 ssl_certificate_key /etc/letsencrypt/live/jinmo-coder.cn/privkey.pem; location / { root /var/lib/jenkins/workspace/codecabin/.vuepress/dist; index index.html index.htm; } }5定时刷新证书可选​因为证书的有效期为90天所以我们需要让这个证书自动去更新通过执行以下命令自动检查系统内的证书并且自动更新这些证书。certbot提供了刷新证书的命令certbot renew --dry-run注意一下这个证书的更新是按着你之前的申请方式来的。你可以通过这个命令来查询你原先是如何申请的grep authenticator /etc/letsencrypt/renewal/域名.conf如果你是 standalone那么后续重新申请它也会用 standalone再申请一次。上面也提到了这种方式80端口不能被占用。所以两个办法一个是你在certbot renew 的时候再关闭并重启一下nginx。另一个就是你用nginx的方式再申请一遍这个域名的证书就好了。然后说回重新申请证书同样的你可以选择每过一段时间来执行一下。也可以搞个定时任务CronCron 服务命令# 查看服务状态 sudo service cron status # 开启服务 sudo service cron start检查服务状态没有启用就开启服务修改cron配置crontab -e第一次使用要选择编辑工具 我们选择2。然后在文件的尾部添加需要的定时任务# 每隔 两个月的 凌晨 2:15 执行 更新操作15 2 * */2 * certbot renew# 检查定时任务是否生效 crontab -l但是这里面可能会有点问题就是上面说到的80端口被占用那个问题。那也可以选择执行脚本写个脚本vim /root/renew_cert.sh内容可以如下#!/bin/bashsystemctl stop nginx # 停止 Nginxcertbot renew # 更新证书systemctl start nginx # 启动 Nginx赋予执行权限chmod x /root/renew_cert.sh上面第三步的renew就改成15 2 * */2 * /root/renew_cert.sh