使用 Let’s Encrypt 免费制作 ssl 证书. 其中如果拥有 SSH 的 root(sudo) 权限, 可以使用 CertBot 来制作证书.
制作证书
下面以 CentOS 7
为例, 制作一个证书.
- SSH 登录服务器
- 添加 CertBot Repo 源
- 安装 CertBot:
sudo yum install certbot
- 制作证书:
sudo certbot certonly --standalone
上面的步骤就可以获取到证书啦. 位置在 /etc/letsencrypt/
目录下.
验证证书有效性
将证书成功加载到网站中后, 验证证书有消息的方法是:
使用浏览器访问网站看看是否有小锁头的标识, 有小黑锁头说明证书有效, 或者小锁头是红色打开状态并且提示证书无效.
另一种方法是使用 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: 使用 pip 升级 urllib3 到兼容版本兼容 requests
又会使 certbot 不兼容
- 错误做法 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)
- 正确做法: 先 yum 卸载 urllib3, 再 pip 卸载 requests, 再 yum 重装 certbot (自动 yum 重装 requests 和 urllib3)
参考文档:
- 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.
- Python module not found even though “Requirement Already satisfied in Pip”
证书自动续期
使用 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