certbot 安装、使用教程,快速申请免费的SSL证书!
2026/8/10 18:07:48 网站建设 项目流程

为了在网站上启用 HTTPS,我们需要从证书颁发机构(CA)获取证书(一种文件)。 市面上获取证书的方式还是挺多的,这次主要给大家介绍一个我平时比较常用的一种免费的方式:cerbot

操作环境

Ubuntu 22.04

Nginx

使用教程

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.com

example.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 nginx

2. 第二种是 报错 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的方式再申请一遍这个域名的证书就好了。

然后说回重新申请证书,同样的你可以选择每过一段时间来执行一下。

也可以搞个定时任务Cron:

  1. Cron 服务命令

    # 查看服务状态 sudo service cron status # 开启服务 sudo service cron start

    检查服务状态,没有启用就开启服务

  2. 修改cron配置

    crontab -e

    第一次使用要选择编辑工具 我们选择2。然后在文件的尾部添加需要的定时任务

  3. # 每隔 两个月的 凌晨 2:15 执行 更新操作
    15 2 * */2 * certbot renew

  4. # 检查定时任务是否生效 crontab -l

但是这里面可能会有点问题,就是上面说到的80端口被占用那个问题。那也可以选择执行脚本:

写个脚本:

vim /root/renew_cert.sh

内容可以如下:

#!/bin/bash
systemctl stop nginx # 停止 Nginx
certbot renew # 更新证书
systemctl start nginx # 启动 Nginx

赋予执行权限:

chmod +x /root/renew_cert.sh

上面第三步的renew就改成:

15 2 * */2 * /root/renew_cert.sh

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询