文章目录
- 1. 在服务器上安装 Certbot
- 2. 停止 web 服务器
- 3. 运行 certbot 命令
- 4. 证书生成位置
- 5. 配置 web 服务器
- 6. 重新加载 web 服务器
- 7. 验证
- 8. 配置自动续期
- 发现问题
- 1. Problem binding to port 80: Could not bind to IPv4 or IPv6.
- 2. live directory exists for example.com
1. 在服务器上安装 Certbot
- 对于 Linux 系统,可以通过包管理器安装 Certbot,如 Debian/Ubuntu 使用:
sudo apt install certbot
,然后输入:“Y”
2. 停止 web 服务器
- 停止现有的 web 服务器程序,如 nginx 或 apache。这样可以避免端口冲突(视实际情况而定)。
3. 运行 certbot 命令
- 这会启动一个临时 web 服务器用来做域名验证,并获取 example.com 和 www.example.com 的证书(其中example需要更换为目标域名)。
sudo certbot certonly --standalone -d example.com -d www.example.com
根据证书获取成功的提示信息,可以看出:
- 证书和链文件已保存到:/etc/letsencrypt/live/example.com-0002/fullchain.pem
- 私钥文件保存到:/etc/letsencrypt/live/example.com-0002/privkey.pem
- 证书有效期至2023-11-12
- 以后需要续期或更新证书,可以再次运行 certbot
- 使用 “certbot renew” 可以自动续期所有证书
通过指定不同的文件名 aihnet.com-0002 避免了与现有证书冲突。接下来的步骤是:
- 将新证书配置到 web 服务器程序中,如 nginx 或 apache。
- 重新加载 web 服务器使证书生效。
- 配置 certbot 的自动续期任务,保证证书持续有效。
- 可选删除旧的证书文件。
总体上看,Certbot 已成功帮助获取了新证书,只需要部署到 web 服务器即可完成使用。以后也可以通过 certbot 轻松自动续期。
4. 证书生成位置
- Certbot 会把证书生成到系统默认路径,如 nginx 的 /etc/letsencrypt/live/example.com/
5. 配置 web 服务器
- 以 nginx 为例,编辑 /etc/nginx/conf.d/example.com.conf ,指向证书文件路径,并添加 SSL 相关配置。
6. 重新加载 web 服务器
- 让 nginx 重新加载新的配置文件并启动。
7. 验证
- 访问网站,检查证书是否正确加载。
8. 配置自动续期
- 添加 crontab 定时任务,使用 certbot renew 定期续期。
以上步骤可完成 Certbot 的标准配置。也可以进一步自定义证书保存路径、配置 HTTP 到 HTTPS 重定向等。Certbot 提供了强大的管理 SSL 证书的自动化能力。
发现问题
1. Problem binding to port 80: Could not bind to IPv4 or IPv6.
根据这个错误信息,问题出在Certbot自动验证过程中启动的临时web服务器未能成功绑定80端口。可能原因有:
- 80端口被其它进程占用了,需要关闭其他正在使用80端口的程序。可以用
netstat -ntlup
来检查。 - Certbot默认使用80端口。如果想使用其他端口,可以添加
--http-01-port 8080
参数来指定端口。
- 防火墙阻止了80端口访问。可以添加规则放行80端口或关闭防火墙测试。
- 服务器上存在多个网卡或IP地址,Certbot绑定了错误的地址。可以用
--preferred-challenges http
参数来强制使用80端口。 - 权限不足,需要以root账户运行certbot或使用sudo。
- 系统底层资源不足,导致无法打开80端口。可以切换到更强劲的服务器。
建议先检查80端口情况,关闭占用进程或改换端口。若还未解决,可以尝试关闭防火墙、指定网络地址绑定等方法。保证Certbot能打开80端口则可顺利完成验证,获取证书。
2. live directory exists for example.com
根据您的命令输出,使用端口8080避免了前面的80端口冲突问题,Certbot验证过程继续进行了下去。但在最后一个步骤时报错显示live目录已存在。这表示您之前已经为example.com生成过证书,并存在默认的证书文件目录/etc/letsencrypt/live/example.com。
出现这个问题的原因可能有:
- 你之前使用certbot或者其他工具已经获取过example.com的证书了,现在会冲突。
- 上次获取证书过程中失败或被中断,留下了残余文件。
- certbot的证书存储路径被修改或指向了自定义目录。
- 不同的certbot版本或模式导致了live目录存放路径不一致。
解决方法是:
- 检查默认目录,删除或备份 existing 现有的证书文件。
- 使用 certbot delete 删除现有证书。
- 指定不同的 --cert-path 来改变新证书的存储位置。
- 加上 --force-renewal 参数来强制重载证书。
在清理已存在的旧证书后,就可以重试命令获取新的证书了。也可以考虑切换到 certbot 的 certonly 模式避免冲突。