使用 Let's Encrypt(CertBot) 制作证书

使用 Let’s Encrypt 免费制作 ssl 证书. 其中如果拥有 SSH 的 root(sudo) 权限, 可以使用 CertBot 来制作证书.

制作证书

下面以 CentOS 7 为例, 制作一个证书.

  1. SSH 登录服务器
  2. 添加 CertBot Repo 源
  3. 安装 CertBot: sudo yum install certbot
  4. 制作证书: sudo certbot certonly --standalone

上面的步骤就可以获取到证书啦. 位置在 /etc/letsencrypt/ 目录下.

验证证书有效性

将证书成功加载到网站中后, 验证证书有消息的方法是:

  1. 使用浏览器访问网站看看是否有小锁头的标识, 有小黑锁头说明证书有效, 或者小锁头是红色打开状态并且提示证书无效.

  2. 另一种方法是使用 curl 访问网站地址看看是否在没有 -k 忽略证书的情况仍然可以访问网站

如果 curl -k 'https://host:port/uri' 可以访问, 但是 curl 'https://host:port/uri' 不可以访问, 说明证书无效.

错误处理

问题 1: 第三步安装 certbot 报错: python-urllib3.noarch 安装失败.

原因是 urllib3 当前是使用 python 的 pip 工具安装, 与 certbot 版本不兼容. 卸载 pip 版本 pip uninstall urllib3, 安装使用 yum 版本 sudo yum install python-urllib3

问题 2: 第四步执行制作证书报错: requests 包与 urllib3<1.22,>=1.21.1 版本不兼容

原因是 urllib3 使用的是 yum 安装, requests 包仍然是 pip 安装, 版本不兼容.

  1. 错误做法 1: 使用 pip 升级 urllib3 到兼容版本兼容 requests

又会使 certbot 不兼容

  1. 错误做法 2: 直接 pip 卸载 requests 并且使用 pip 重新安装.

卸载报错: ERROR: Cannot uninstall 'requests'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

重新安装报错: Requirement already satisfied: requests in /usr/lib/python2.7/site-packages (2.6.0)

  1. 正确做法: 先 yum 卸载 urllib3, 再 pip 卸载 requests, 再 yum 重装 certbot (自动 yum 重装 requests 和 urllib3)

参考文档:

证书自动续期

使用 crontab 执行

echo "0 0,12 * * * root python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew -q" | sudo tee -a /etc/crontab > /dev/null

Donate - Support to make this site better.
捐助 - 支持我让我做得更好.