为什么要使用 HTTPS ?
1、HTTPS加密使网站速度更快!
首先强调速度是因为,一个网站的性能通常跟访客销售转化、页面加载时间对收入的影响等指标直接挂钩。这是一个被非常非常广泛记录的问题,有很多大型网站和工具可以展示HTTPS如何变得更快。
2、HTTP/2协议只支持HTTPS加密连接
所有主流浏览器只支持使用TLS1.2协议安全连接的HTTP/2协议。Chrome、火狐、Safari、Opera、IE和Edge都要求使用HTTPS加密连接,才能使用HTTP/2协议。这对网站所有者来说是另一个有利的推动因素。
3、HTTP页面将标记“不安全”
当用户访问网站时,没人想要浏览器上的红色警告,但是如果你的网站采用HTTP链接来传输数据,那红色警告将成为常态。
以前浏览器对不安全的HTTP页面没有任何标记,而含有部分不安全因素的HTTPS页面却显示安全警告,让人们误以为含有不安全因素HTTPS页面不如HTTP页面安全,这是非常错误的。谷歌和火狐将在标识上做进一步优化,区分HTTP不安全连接和HTTPS安全连接,谷歌Chrome将为所有 HTTP网站打红叉,用户可以在Chrome 48或者部分更老版本中体验到这项全新的功能;火狐浏览器将从 Firefox 的开发版 46 开始,对”使用非HTTPS提交密码”的页面进行警告。
4、HTTPS加密提升搜索排名
谷歌早在2014年宣布,将把HTTPS加密作为影响搜索排名的重要因素,并优先索引HTTPS网页。百度也公告表明,开放收录https站点,同一个域名的http版和https版为一个站点,优先收录https版;百度官方还表示,网站HTTPS加密不会对流量产生负面影响。在搜索引擎巨头的倡导和实践下,我们可以预见HTTPS加密将在未来产生越来越大的影响力。
5、HTTPS加密防止中间人流量劫持
当你的网站通过HTTP连接传输网页内容时,WiFi节点、运营商、路由器等任何传输节点都可以对网站传输内容进行劫持、篡改、恶意注入等,比如早已见惯的广告弹窗。很多人已经对此麻木,并认为流量劫持不会造成什么损失,但是服务器采取HTTP不安全连接,其实是给黑客留下一道后门,可以向你的网页注入任意恶意内容,如盗号木马等,通过多种你无法觉察的方式窃取网站数据或向您的终端用户下手。HTTPS加密可以有效阻止流量劫持,尤其是全站HTTPS加密,封装所有流量加密传输,让中间人没有可乘之机。
6、iOS和安卓都要求使用HTTPS加密
苹果iOS的App Transport Security和谷歌安卓的usesCleartextTraffic manifest attribute,都推动移动APP默认使用HTTPS加密连接进行通信。苹果iOS强制APP使用HTTPS加密连接,并且要求非常严格,包括只使用TLS1.2协议,必须使用RSA2048位或ECC256位的公钥算法及SHA256签名算法等。如果你的内容或API接口需要在移动APP上使用,那么必须按要求使用HTTPS加密连接。
7、超级权限应用禁止使用HTTP连接
谷歌Chrome安全团队宣布,采用不安全连接访问浏览器特定功能,将被禁止访问,例如地理位置应用、应用程序缓存、获取用户媒体等。 采用不安全的HTTP连接访问用户位置信息并发送,可能造成用户信息的泄漏,确保这类超级权限功能全程使用HTTPS安全连接是使用这些功能的重要步骤。如果你最近使用了一些这样的功能并且希望继续在你的网站上使用,那么你必须让这些页面使用HTTPS加密连接。
使用Let’s Encrypt将HTTP升级成HTTPS
什么是 Let's Encrypt
Let's Encrypt 是一个由非营利性组织 互联网安全研究小组(ISRG)提供的免费、自动化和开放的证书颁发机构(CA)。
简单的说,借助 Let's Encrypt 颁发的证书可以为我们的网站免费启用 HTTPS(SSL/TLS) 。
Let's Encrypt免费证书的签发/续签都是脚本自动化的,官方提供了几种证书的申请方式方法,点击此处 快速浏览。
官方推荐使用 Certbot 客户端来签发证书,这种方式可参考文档自行尝试,不做评价。
我这里直接使用第三方客户端 acme.sh 申请,据了解这种方式可能是目前 Let's Encrypt 免费证书客户端最简单、最智能的 shell 脚本,可以自动发布和续订 Let's Encrypt 中的免费证书。
现今Let's Encrypt在市场上使用率已经占了80%以上并支持多种浏览器。
准备工作
- 邮箱(用于做通知续费事项)
- 域名(Let's Encrypt不支持使用IP来代替域名)
- nginx(配置https访问)
- Linux系统(Ubuntu)
开始升级
1.首先我们要安装git
apt-get update apt-get -y install git
2.克隆letsencrypt工程 到 /opt/letsencrypt
sudo lgit clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
3.关闭Nginx
sudo service nginx stop
4.进入到letsencrypt目录
cd letsencrypt
5.运行Standalone插件
sudo ./letsencrypt-auto certonly --standalone
提示: 执行./letsencrypt-auto certonly --standalone命令之后若没有出现错异常退出则会提示好下信息:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): 此处填你的email联系地址
——————————————————————————-
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A
——————————————————————————-
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o: Y
之后会提示输入域名,本例域名为www.xx.com,若有多个子域名,以空格隔开。
Please enter in your domain name(s) (comma and/or space separated) (Enter 'c' to cancel):www.xx.com
如果所有的都成功了将会看到下面的信息:
6.生成证文后,配置nginx
server {
listen 443;
server_name www.xx.com;
...
}
7.重启Nginx服务
sudo systemctl restart nginx.service
8.自动续费SSL证书
90天后早忘了https证书这事了,虽然Let's Encrypt会提前发邮件通知你,但还是写个脚本放crontab让它自动更新最为妥当:
- 设置该文件可访问
chmod +x /opt/letsencrypt/certbot-auto
- 创建一个自动续期的脚本
vi /opt/letsencrypt/sslrenew.sh
#!/bin/sh
/opt/letsencrypt/certbot-auto renew --quiet --no-self-upgrade
:wq!
- 设置该脚本可以被访问
chmod +x /opt/letsencrypt/sslrenew.sh
- Certbot只有在证书到期前一个月才会进行更新,如果证书还没到期,它是不会进行更新的。所以设定让服务器每周日凌晨01:05分开始自动更新。
vi /etc/crontab
05 1 * * 0 /opt/letsencrypt/sslrenew.sh
:wq!
注: 确保certbot定时是可以使用的,否则到时候是无法生效该脚本。