参考博客1:Let's Encrypt教程 - 简书
参考博客3:利用letsencrypte生成证书时,create virtual environment失败_Note的技术博客_51CTO博客
本文旨在记录此次安装过程中遇到的问题及解决办法,安装过程参考“参考博客1”。前半部分将介绍 Let's Encrypt 的安装与证书获取,后半部分主要记录安装过程中遇到的问题。
环境:Ubuntu 16.04
软件:Nginx
一、申请证书流程
1. 安装工具
sudo apt-get install letsencrypt
2. 域名配置
将域名 example.com
A 记录指向当前服务器的 IP 地址。
3. 获取证书
- 暂停 Nginx
sudo service nginx stop
- 执行获取证书命令
sudo letsencrypt certonly --standalone
按提示输入对应的域名走完流程,生成的证书信息将存放在如下目录:
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
4. 配置 Nginx
server {
......
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
......
}
5. 重启 Nginx
sudo service nginx start
6. 证书自动更新
证书有效期只有90天,所以需要定期更新证书。
新建文件 certbot-auto-renew-cron
,内容如下:
15 2 * */2 * certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"
执行命令:
crontab certbot-auto-renew-cron
每隔两个月的凌晨 2:15 将执行更新操作。
二、申请证书问题
问题1:在执行上述“获取证书”步骤的命令 “sudo letsencrypt certonly --standalone” 时,报以下错误:
0 upgraded, 0 newly installed, 0 to remove and 6 not upgraded.
Creating virtual environment...
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/virtualenv.py", line 2363, in <module>
main()
File "/usr/lib/python3/dist-packages/virtualenv.py", line 719, in main
symlink=options.symlink)
File "/usr/lib/python3/dist-packages/virtualenv.py", line 988, in create_environment
download=download,
File "/usr/lib/python3/dist-packages/virtualenv.py", line 918, in install_wheel
call_subprocess(cmd, show_stdout=False, extra_env=env, stdin=SCRIPT)
File "/usr/lib/python3/dist-packages/virtualenv.py", line 812, in call_subprocess
% (cmd_desc, proc.returncode))
OSError: Command /root/.local/share/letsencrypt/bin/python - setuptools pkg_resources pip wheel failed with error code 1
解决办法:卸载重装 virtualenv
pip uninstall virtualenv
pip install virtualenv
问题2:在执行上述“获取证书”步骤的命令 “sudo letsencrypt certonly --standalone” 时,报以下错误:
Failed authorization procedure. kjfhaifahoa.cn (http-01): urn:ietf:params:acme:error:dns :: DNS problem: NXDOMAIN looking up A for kjfhaifahoa.cn - check that a DNS record exists for this domain
IMPORTANT NOTES:
- The following errors were reported by the server:
Domain: kjfhaifahoa.cn
Type: None
Detail: DNS problem: NXDOMAIN looking up A for kjfhaifahoa.cn -
check that a DNS record exists for this domain
解决办法:检查通过域名能否正确访问到服务器,如域名是否正确,域名是否已备案或备案是否已通过。我出现这个问题时是因为域名正在备案,但还没有通过,域名备案通过后就没问题了。
问题3:nginx: [emerg] unknown directive “ssl_certificate1” in /usr/local/nginx/conf/nginx.conf:94
这个是因为 nginx 没有装 ssl 模块,安装 ssl 模块即可
1)在nginx的安装目录执行
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
2)在nginx安装目录执行
make
3)上一步执行完重启 nginx,如果不报错,说明安装成功。如果报错,再执行下一句(亲测make install不会覆盖之前的配置)
make install
问题4:配置好Nginx及证书后浏览器报“响应时间过长”
解决办法:这个是因为服务器 443 端口未开启( HTTPS 服务使用的是 443 端口)。开启 443 端口即可:
1)我的是阿里云服务器,需要登录阿里云控制台,添加 “入方向” 规则
2)设置防火墙,放行 443 端口,先运行 nginx 监听 443 端口, 再配置防火墙规则放行 443 端口
iptables -I INPUT -p tcp --dport 443 -j ACCEPT
问题5:配置好证书后360浏览器还是报证书错误
这个是因为 Let's Encrypt 证书不被360浏览器,换浏览器打开或者换证书即可。
阿里云提供免费的SSL证书,三个月一换:数字证书管理服务管理控制台 - SSL 证书
腾讯提供免费的SSL证书,一年一换:登录 - 腾讯云
问题6:配置 Http 强制跳转 Https
1)return 301 https://$server_name$request_uri;
2)return 301 https://$http_host$request_uri;
使用 http 发起请求时,这两种写法都能实现 http 转 https,区别是: 1)在浏览器地址栏能看到地址由 http 变为了 https,但是 2)看不到,也就是转发到 https 后浏览器地址栏实际看到的还是http
# http使用的是 80 端口,将 80 端口的请求都转发到 https 即 443 端口
server {
listen 80;
server_name kiion.cn www.kiion.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name kiion.cn www.kiion.com;
ssl_certificate /etc/letsencrypt/live/kiion.cn/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/kiion.cn/privkey.pem;
}