2025年10月

certbot是Let’s Encrypt官方推荐的工具。入口点击这里

首先选择web环境和系统。Linux选择snap,因为pip是针对python的。
注意:提前备份服务器快照。

1、使用SSH连接服务器

以具有 sudo 权限的用户身份通过 SSH 登录运行你 HTTP 网站的服务器。

2、安装snapd

根据服务器操作系统版本选择。入口点击这里

3、删除 certbot-auto 及任何 Certbot 操作系统软件包

如果你通过操作系统的包管理器(如 apt、dnf 或 yum)安装了任何 Certbot 软件包,应该在安装 Certbot snap 之前将其移除,以确保在运行 certbot 命令时使用的是 snap 版本,而不是通过操作系统包管理器安装的版本。具体的命令取决于你的操作系统,但常见的示例有 sudo apt-get remove certbot、sudo dnf remove certbot 或 sudo yum remove certbot。

4、安装 Certbot

sudo snap install --classic certbot

5、准备 Certbot 命令

sudo ln -s /snap/bin/certbot /usr/bin/certbot

6、选择您希望运行 Certbot 的方式

--nginx 选项会自动检测主配置文件(如 /etc/nginx/nginx.conf)。
宝塔sudo certbot certonly --webroot -w /var/www/html -d yourdomain.com -d www.yourdomain.com
其中/var/www/html是网站所在文件夹路径。

7、测试自动续订

您系统上的 Certbot 软件包包含一个 cron 任务或 systemd 定时器,会在证书过期前自动续期。除非您更改配置,否则无需再次运行 Certbot。您可以通过运行以下命令来测试证书的自动续期:
sudo certbot renew --dry-run
更新 certbot 的命令安装在以下某个位置:
/etc/crontab/
/etc/cron.*/*
systemctl list-timers

8、确认 Certbot 是否工作正常

要确认您的网站已正确设置,请在浏览器中访问 https://yourwebsite.com/,并查看 URL 栏中的锁形图标。

如果安装不成功,可在阿里云或者腾讯云申请免费SSL证书。具体教程看这里

在 Linux 系统中,限定特定端口只能由指定 IP 登录,可通过防火墙工具(如firewalld或iptables)实现。以下是两种常用工具的配置方法。Ubuntu 系统默认使用的防火墙工具是 ufw(Uncomplicated Firewall),它是iptables的前端工具,设计初衷是简化防火墙配置,适合新手和日常基础使用。

常用基础命令

  • 启用防火墙
    sudo ufw enable
  • 关闭防火墙
    sudo ufw disable
  • 查看防火墙状态
    sudo ufw status
  • 允许特定端口(如22号端口)
    sudo ufw allow 22
  • 允许特定IP访问所有端口
    sudo ufw allow from 192.168.1.100
  • 允许特定IP访问指定端口(如允许192.168.1.100访问80端口)
    sudo ufw allow from 192.168.1.100 to any port 80
  • 拒绝某个IP的所有访问
    sudo ufw deny from 192.168.1.200
  • 删除已添加的规则(先通过sudo ufw status numbered查看规则编号)
    sudo ufw delete 规则编号

如果需要更复杂的防火墙配置(如端口转发、高级规则等),可以直接使用iptables,但ufw已能满足大多数常规场景需求。

生效与验证

  • 启用防火墙(若未启用)
    sudo ufw enable
  • 重新加载规则(配置后建议执行)
    sudo ufw reload
  • 查看已配置的规则
    sudo ufw status verbose

有必要限定ip的端口

  • SSH 端口(22)
    SSH 用于远程登录服务器,若开放给任意 IP,易遭受暴力破解攻击。强烈建议仅允许信任的 IP(如管理员办公 IP)访问。
  • FTP 相关端口(21、20 等)
    端口 21 是 FTP 控制端口,数据传输通常涉及端口 20(主动模式)或随机端口(被动模式)。FTP 传输未加密时风险高,建议仅对内部 IP 或特定业务 IP 开放。
  • 数据库相关端口
    3306(MySQL):数据库端口,若暴露公网,数据泄露风险极大,必须限定可访问的 IP(如应用服务器 IP)。
    1433(SQL Server):同理,仅允许业务关联的 IP 访问。

优先处理 22、3306、1433、21 等直接涉及远程管理、数据存储的端口,通过 ufw 限定访问 IP,大幅降低被攻击风险。

问题
当前证书申请并验证成功,自动部署失败,请尝试手动部署证书! 证书错误:
nginx: [emerg] no "ssl_certificate" is defined for the "listen ... ssl" directive in /www/server/panel/vhost/nginx/your-domain.conf:1
nginx: configuration file /www/server/nginx/conf/nginx.conf test failed

解决
这个错误提示表明 Nginx 配置文件中存在问题:在 /www/server/panel/vhost/nginx/your-domain.conf 的第 1 行,有一个 listen ... ssl 指令,但没有定义对应的 ssl_certificate(SSL 证书)配置。

  1. 编辑 Nginx 配置文件:
    路径: /www/server/panel/vhost/nginx/your-domain.conf

    • 在listen 80字段中,看是否缺失主域名或www二级域名。
  2. 添加 SSL 证书配置:(找到第二个server块,添加 HTTPS 监听配置)

    • listen 443 ssl; # 添加HTTPS监听
      在包含 listen ... ssl 的 server 块中,添加以下两行配置(请替换为实际证书路径):
    • 宝塔面板:证书默认路径一般为:
    • /www/server/panel/vhost/ssl/your-domain/fullchain.pem(证书文件)
    • /www/server/panel/vhost/ssl/your-domain/privkey.pem(私钥文件)
  3. 重启nginx服务。