把网站升级为https

在最新的 Chrome 和 Firefox 浏览器中,均开启了对 HTTP 页面的安全警告,以此提醒用户小心有安全漏洞或包含恶意软件的危险网站。这些提示在增强用户的网络安全意识的同时,也必然会导致 HTTP 网站流失用户,因此为了让用户放心安全体验您的网站,应该尽早部署 SSL 证书,启用 HTTPS 加密协议

而且运营商流量劫持时有发生,这属于中间人攻击的一种,其实质就是在数据通路上劫持文件并篡改(一般是加入广告代码),并将篡改后的文件发送给客户端。由于 HTTP 协议完全是明文传输,很容易被劫持、篡改。为了杜绝这种影响用户体验的行为,升级 HTTPS 也是最好的方法。

本文介绍了我在 CentOS + Nginx 环境下的 HTTPS 部署经历。

选择证书

要升级 HTTPS 的第一步,当然是要先申请适合自己网站的 SSL 证书,我这里推荐 Let’s Encrypt 的免费证书。尤其是国内云厂商基本都支持 Let’s encrypt 免费证书了,无论申请还是开启 Let’s encrypt 证书都很方便了。

还有,不要申请那些乱七八糟的免费证书,例如 赛门铁克、WoSign、StartSSL 等,至于为什么,请自行百度一下。

安装

下面我介绍服务器有 shell 访问权限的 https 升级方法。

选择 Certbot 方式

Cerbot ACME 是 Let's Sencrypt 推荐的方法。它可以自动执行证书的颁发和安装,不需要停止服务器运行。它也为不想自动配置的人提供专家模式。它很容易使用,适用于许多操作系统,并且具有出色的文档。访问 Certbot 站点以获取适用于您的操作系统和Web服务器的定制说明。

选择 nginx 和 CentOS 环境

在打开的 Certbot 网站上选择 nginx 和 CentOS ,我这里是 CentOS 7 所以选择 CentOS/RHEL 7。

1
2
3
4
5
6
7
8
9
10
11
12
13
# 安装 Certbot 
sudo yum install python2-certbot-nginx

# 配置
sudo certbot --nginx
# 或 使用手动配置
sudo certbot --nginx certonly

# 测试自动更新
sudo certbot renew --dry-run

# 添加定时任务,安排自动更新
certbot renew

注意事项

  1. 在使用命令 sudo certbot --nginx 时,可能会遇到 NoInstallationError()错误。这个错误意味着 Certbot 无法找到你的 Nginx 副本,通常可以通过重新安装 Nginx 来解决。可以使用命令 yum install nginx 来重新安装 nginx。

  2. 如果遇到 UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 2: ordinal not in range(128) 错误,通常是因为你的 nginx.conf 里有非 ASCII 字符(如中文注释等),删除这些就可以了。