发现网站长期被运营商劫持,我该上SSL证书嘛
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了发现网站长期被运营商劫持,我该上SSL证书嘛相关的知识,希望对你有一定的参考价值。
参考技术A 这种情况最好要安装SSL证书,因为它的主要功能是服务器认证和数据加密传输,可以防劫持、防钓鱼网站,很好的保护了网站的安全。SSL证书价格几百到几千元不等,选择适合自己网站的才是最重要的。具体的申请步骤如下:
第一步,生成并提交CSR(证书签署请求)文件
CSR文件一般都可以通过在线生成(或服务器上生成),申请人在制作的同时系统会产生两个秘钥,公钥CSR和密钥KEY。选择了SSL证书申请之后,提交订单并将制作生成的CSR文件一起提交到证书所在的CA颁发机构。
第二步,CA机构进行验证
CA机构对提交的SSL证书申请有两种验证方式:
第一种是域名认证。系统自动会发送验证邮件到域名的管理员邮箱(这个邮箱是通过WHOIS信息查询到的域名联系人邮箱)。管理员在收到邮件之后,确认无误后点击我确认完成邮件验证。所有型号的SSL证书都必须进行域名认证。
第二种是企业相关信息认证。对于SSL证书申请的是OV SSL证书或者EV SSL证书的企业来说,除了域名认证,还得进行人工核实企业相关资料和信息,确保企业的真实性。
第三步,CA机构颁发证书
由于SSL证书申请的型号不同,所验证的材料和方式有些区别,所以颁发时间也是不同的。
如果申请的是DV SSL证书最快10分钟左右就能颁发。如果申请的是OV SSL证书或者EV SSL证书,一般3-7个工作日就能颁发。
Ghost+Nginx部署HTTP2
SPDY的时代就一直想要折腾下,主要是被运营商劫持的太恶心了。而避免被运营商劫持的最佳方案就是部署https。
SPDY还没有大规模使用,HTTP2就来了,于是就开始等nginx支持。
然后最近一直被热姐BS:你怎么还没有搞https啊?这个家伙无聊的搞了个网站叫https://youqu.us,用上了免费的国产SSL证书,于是各种得瑟~~
好吧,了解了下时机已经成熟,于是就开始部署。
SSL证书
SSL证书免费的收费的各种各样,看的头大,于是决定尝试使用Let's Encrypt的免费证书,最近很火的一些知名互联网企业包括google、mozilla、思科等联合支持的服务。昨天晚上申请,今天早上就通过了。
于是按照他们的介绍来自动化部署,开始还挺顺利的,到最后域名验证不通过。。。搜索了下是因为DNS的问题,我用DNSpod的服务,然后貌似hichina、cloudxns的DNS也都会有问题,换DNS的话。。。太麻烦,放弃。
既然部署https/2的目的就是防止被运营商劫持,那么买最便宜的comodo private SSL证书就够用了。
安装证书什么的很简单,网上一搜一大把,就不多介绍了。
Ghost
本身Ghost并不需要怎么配置的,因为我是用了Nginx做代理,所以只需要Nginx去监听443端口就可以了。
嗯,配置需要简单改一点,url那里加上urlssl就可以了:
... production: {// url: 'http://www.qianduan.net',
urlssl: 'https://www.qianduan.net',
...
Nginx
安装
之前主要是在等nginx支持http2,而之前的消息是nginx在年底前会支持到,其实在10月份的1.9.5版本就开始支持了,只不过是mainline版本,而不是stable版本。
只是,一般服务器系统安装的nginx都是stable版本(现在是1.8),那么要用到mainline版本就要自己编译一个,还是略麻烦的。Nginx也有介绍直接安装mainline版本的方法:http://nginx.org/en/linux_packages.html#distributions ,根据自己服务器按介绍来配置就好了。
配置
和http监听80端口相比,Nginx配置简单变了下,不麻烦,根据Ghost官方的方法配置就好了:
server{
listen 443 ssl http2;
server_name www.qianduan.net;
ssl on;
charset utf-8;
ssl_certificate /path/to/your/domain.crt;
ssl_certificate_key /path/to/your/domain.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:2368;
}
}
注意,要用http2,在第二行ssl后面要添加进来,nginx不会默认使用http2的。
到此为止,主要的配置就完了。
分别重启下ghost和nginx:
嗯,https已经可以访问了,而且也已经有证书信息了。
等等,好像哪里不对?!
connection信息第二项的锁形图标带感叹号?
这主要是因为页面里面有一些非HTTPS的mixed content:
这样浏览器也会认为页面不是绝对安全的,chrome不允许mixed content执行,比如js,从截图可以看到,最下面的那条被block了,而图片等是可以显示的,只会有黄色的告警。而Safari却允许mixed的js执行,从而有可能被运营商利用来劫持iPhone用户(事实上运营商真的是这样干的!)
比较郁闷的是,普通的SSL证书是单域名的,也就是说,仅支持qianduan.net和www.qianduan.net,而不支持各种子域名——野卡(wildcard ssl)才支持子域名。而前端观察网站的大量图片是放在img.qianduan.net
子域名上的。
最开始考虑用代理或者重定向来将请求变成https。后来和热姐讨论,感觉不行。。。
最后突然想到Ghost有导出和导入json的功能!于是后台导出所有数据为json文件,sublime批量替换img.qianduan.net
为//www.qianduan.net/img/
T T
然后nginx加一条规则alias
img
目录就好了。。。
location /img/ {
alias /path/to/img/;
}
搞定~~
HTTP跳转
剩下http访问时跳转的问题,有很多种方法,我的配置:
server {
listen 80; server_name qianduan.net www.qianduan.net; return 301 https://www.qianduan.net$request_uri;
}
效果:
总结
整个过程其实没啥困难,主要是2点:1.证书;2.httpd软件支持。
具体访问速度,并没有感觉什么变化。
另外,大部分证书(SHA-2)不再支持 IE6 和android 2.3。商业用途时,还需要考虑证书的兼容性。
以上是关于发现网站长期被运营商劫持,我该上SSL证书嘛的主要内容,如果未能解决你的问题,请参考以下文章