1.首先感谢@志豪的提醒和帮助,让我得以有动力以最小的成本把站点HTTPS化。
2.以下是我将自己站点HTTPS的过程,以及做这件事的收益,整理成了短文,给大家借鉴一下。
为什么要HTTPS化?
HTTPS是什么
之前自己写过一篇比较详细的介绍——《【后端】HTTPS化》。
行内状态
- Google 的 Chrome 浏览器将在 2017 年 1 月开始,标记使用不加密的 HTTP 协议的网站为 Not Secure,不安全。
-
Apple will require HTTPS connections for iOS apps by the end of 2016
HTTPS的好处
这里分享一个BAIDU同事的文章,里面给出了很详细的解答:互联网全站HTTPS的时代已经到来
一些显而易见的好处:
- 百度、Google对HTTPS站点的SEO权重会增加,检索排名会刚加前置。
-
让你的网站用户隐私数据更加安全。
-
越来越多的浏览器会对HTTP标识不安全链接的提示语,HTTPS化会让你的用户访问更加没有顾虑
- 让你的站点可以为IOS应用开发提供HTTPS支持。
- 随着Apple和Google强势带起节奏,互联网全名HTTPS只是时间问题,针对开发者的政策每年也逐渐收紧,现在不迁,迟早要迁。
HTTPS迁移过程
要使用HTTPS,我们首先需要安全机构颁发的安全证书,然后配置自己的服务器,去使用这个证书。感谢阿里云提供的免费证书,让我们这些"屌丝个体户"可以以最小成本去获得收益。
1.申请证书
- 登录阿里云控制台 ->
安全(云盾
->证书服务
->购买证书
-
证书类型选择
免费型DV SSL
->赛门铁克
SSL服务商` -> 1年申请(好像目前过期了还可以免费申请)
-
补全自己的域名、联系人和站点信息等。
-
域名验证,选择阿里DNS的直接会自动插入TXT解析规则进行验证。
-
上传:系统生成 CSR,点一下 创建。
-
提交审核,如果一切正常,10 分钟左右,申请的证书就会审核通过。
2.下载证书
在阿里云的证书管理那里,如果申请的证书审核通过,你就可以下载了,点击 下载,可以选择不同的类型,可以选择 NGINX,或 Apache 之类的服务器。根据自己网站的 Web 服务器类型,下载对应的证书。解压以后,你会得到两个文件一个是 *.key,一个是 *.pem。
3.配置站点
- 将下载好的证书配置在nginx上
- 配置
nginx.conf
,default.conf
(因为我的工程是基于wordpress的PHP框架,需要配置php root和rewrite路由规则)
server {
listen 443;
server_name daijiale.cn www.daijiale.cn;
ssl on;
root /home/www/daijiale_cn;
index index.php index.html index.htm;
ssl_certificate cert/214099916240190.pem;
ssl_certificate_key cert/214099916240190.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
root /home/www/daijiale_cn;
index index.php index.html index.htm;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
access_log /home/www/log/daijiale_cn.log;
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;
}
}
- 重启Nginx
- 重新访问你的
https+域名
,如下所示,你的HTTPS站点就大功告成拉。
4.全站HTTPS化 CDN资源HTTPS适配
这里踩了一个小坑,之前未做好站点其他资源文件以及部分工程代码的适配,所以当刚迁入Https之后,一些服务和网站的静态资源根本无法work,也寻址不到。这里介绍一些我的解决方案:
- 所有资源文件镜像同步至七牛云上,开启
SSL证书服务
,融合CDN加速
。 - 修改镜像存储,设置镜像域名为你的https域名,并指定一个对象存储空间。
- 修改域名绑定,把已迁入https的自己的域名,绑定在七牛对象存储空间上,此空间之前的所有http外链都将自动适配https。如下所示:
-
修改自己服务器的工程,把一些残留的http代码块都替换成https,最好借这个机会抽象成宏,在入口config文件中定义,这样以后就不用频繁更改局部代码了。
5.http重定向至https
我们需要支持将http请求强制跳转至https, 毕竟用户在浏览器当中输入地址时, 几乎没有用户会主动在浏览器地址栏当中输入: https:// 。
要达到这一个需求,其实方案有很多。这里,我个人推荐的方式是架设一个nginx, 通过配置server listen 80来做强制跳转。
Why?因为大多数的阿里云用户都部署了SLB(负载均衡)服务,可阿里云的SLB服务并不支持redirect强制跳转的功能,只支持通过nginx反向代理来做映射。这种方式,无论是对于启用了SLB服务的企业用户还是一些未启用SLB的个人用户,都是一劳永逸的。
配置Nginx的default.conf
,如下:
server {
listen 80;
server_name daijiale.cn;
return 301 https://$host$request_uri;
}
重启Nginx,访问http://www.daijiale.cn, 我们看到浏览器自动跳转到https://www.daijiale.cn 上了
最终,经过我们的优化,现在咱们的服务整体架构就如下图所示,整个站点https的迁移也更加优雅。
全站综合测评
经过之前的大费周章,其实目的是为了在迁移https前后不影响全站的访问速度、性能和流量。
PS:毕竟谁也不想自己的站点,从http迁移至https后,还远不如以前的性能。
为此,我这里对迁移之后的站点做了一个综合测评,如下所示:
SSL Report 评测
评测方法:访问https://www.ssllabs.com/ssltest/index.html, 以下是我们按照上述方式调整之后的得分:
HTTP Security Report评测
评测方法:访问https://httpsecurityreport.com/, 以下是我们按照上述方式调整之后的得分:
安全性得分并不高,毕竟没有针对安全性进行专门的优化(https://www.baidu.com 评测后也才34分,话说这网站打分是真的狠),后期如果有需要,可以根据评测指出的缺陷逐一进行优化,具体参考如下:https://httpsecurityreport.com/best_practice.html
Comments | NOTHING