【HTTPS】如何免费且优雅地让站点HTTPS化


1.首先感谢@志豪的提醒和帮助,让我得以有动力以最小的成本把站点HTTPS化。

2.以下是我将自己站点HTTPS的过程,以及做这件事的收益,整理成了短文,给大家借鉴一下。

为什么要HTTPS化?

HTTPS是什么

之前自己写过一篇比较详细的介绍——《【后端】HTTPS化》

行内状态

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

声明:枫言枫语 | 版权所有,违者必究 | 如未注明,均为原创 |

本网站采用CC BY-NC-SA 3.0国际化协议进行授权

转载:转载请注明原文链接 - 【HTTPS】如何免费且优雅地让站点HTTPS化


只有汗水不会欺骗你