https – 笛声 https://hqidi.com 寻常的人儿依旧 Sat, 07 Jul 2018 03:54:35 +0000 zh-CN hourly 1 https://wordpress.org/?v=6.6 小白教程:怎么升级到https https://hqidi.com/126.html https://hqidi.com/126.html#comments Sat, 23 Jun 2018 03:46:59 +0000 //hqidi.com/?p=126 谷歌在2018年2月初的时候宣布,自2018年7月份开始,Chrome浏览器将会标记所有依然使用HTTP的网站为“不安全”。若7月份,你的网站还是没有部署https,将会是下图的效果:
chrome标记不安全

浏览器会在你的网址前面打上“不安全”的标识。这会吓到一些小白用户,他们会认为你的网站有木马、病毒之类的东西,你就会失去这部分可爱的用户。所以,部署HTTPS迫在眉睫,就像侏罗纪世界2里面,火山岩浆已经流到你面前了,你还打算躺一会儿吗?

本文旨在用比较简单的方法来部署https,不涉及到复杂的操作,让小白用户也能轻松把网站升级到https。
首先,我们得获取https证书,很多网友都在盲目推荐 Let's Encrypt提供的证书,都说这个证书好,好在哪又说不出来,好像有信仰加成一样。我非常不建议使用 Let's Encrypt证书,这个证书只有三个月的有效期,你的网站不用CDN的话,这个证书还是堪用的,因为可以用常驻后台的脚本自动续期,用CDN的话,你每隔三个月都得手动去CDN端更换证书,你不嫌烦,CDN上的证书管理系统还嫌烦呢。腾讯云有提供1年期免费的HTTPS证书。

申请https证书

申请证书分两种情况,你的域名在阿里云或者腾讯云。

域名在腾讯云解析

1、打开 https://console.cloud.tencent.com/ssl 点击申请证书
腾讯云申请https证书

2、选择“亚洲诚信”证书

3、通用名称那里一定要加上www,只写主域 hqidi.com 是不行的

4、因为你的域名在腾讯云解析,所以选自动DNS验证就行
腾讯云申请https证书

5、点击确认申请,10分钟左右,证书就会正常颁发。

域名在阿里云解析

1、打开https://console.cloud.tencent.com/ssl 点击申请证书
腾讯云申请https证书

2、选择“亚洲诚信”证书

3、通用名称那里一定要加上www,只写主域 yamao.xin 是不行的

4、选择手动DNS验证,然后点击确认申请

5、点击查看证书详情

6、得到DNS记录信息

7、打开 https://dc.console.aliyun.com/next/index#/domain/list/all-domain 添加解析记录

8、点击右侧的“添加记录”添加一条TXT记录

9、TXT记录添加好后,10分钟左右,证书颁发

此时,HTTPS证书已经到手,成功了一半了。

接入腾讯云CDN

为什么选腾讯云的CDN呢?因为其提供每个月10G的免费流量,新用户是60G
1、打开 https://console.cloud.tencent.com/cdn/access 点击添加域名
2、域名配置

源站设置后面的框里面填入你自己网站服务器的IP地址。
3、加速服务配置

业务类型自己酌情选择,个人博客的话,就直接用静态加速就行,其他保持默认。
4、打开 https://console.cloud.tencent.com/cdn/tools/certificate 点击“配置证书”

5、我们回到 域名管理页面 https://console.cloud.tencent.com/cdn/access

域名前面有个绿锁,状态是“已启动”,此时,胜利的曙光就在眼前。
6、登录 域名管理 控制台,单击要添加 CNAME 记录的域名右侧的【解析】

然后把原来的www记录全部点击暂停,添加一条新的www记录

记录值就是上面第五步中红框里面的值。
cname记录添加成功后,你的网站升级到HTTPS了,源站不用做任何改动。此时用户访问的路径是这样的:
用户 --> 443--> CDN --80--> Host
最后,最好还是花点时间把源站也弄好HTTPS证书,证书我们已经有了,在 https://console.cloud.tencent.com/ssl 下载。不会弄的话,不弄也行。
顺便说说这个证书的情况,证书大小3680字节,大小适中,三个数据包能传送完,证书包含完整的证书链,不会出现Android访问报错“当前网站证书不可信且证书链长度为1”的情况。

原创文章,转载请注明: 转载自笛声

本文链接地址: 小白教程:怎么升级到https

]]>
https://hqidi.com/126.html/feed 23
网站上HTTPS https://hqidi.com/102.html https://hqidi.com/102.html#comments Fri, 06 Oct 2017 00:07:26 +0000 //hqidi.com/?p=102 网站速度一直太快,哪怕上加了百度云减速以后还是快,只好上https。
建站初期没有上https,运营过一段时间后再上,还是有些许麻烦的。本站现在情况:
➤图片放在七牛,绑定了一个子域img.hqidi.com,这样就有一个问题,上https得用通配符证书,太贵。。
➤文章ID是绝对连续的,看这里
➤网站运行在阿里云的VPS上。
此次上https要达到的效果:
➤使用HTTP/2传输协议,原理之类的不多说,就一个字“”。
➤没钱买通配符证书,把原来在七牛的图片放到本地。
➤服务器不能裸奔,得套一层CDN。

HTTPS 升级步骤

获取证书

我的证书是从https://www.namecheap.com/购买的单域名证书,该网站有详细的文档指导你获取证书,过程不表,最后通过邮箱发来证书,最好使用国外邮箱。邮件里面有一句:
Thank you for placing your order. We are pleased to announce that your PositiveSSL Certificate for hqidi.com has been issued.
To help reduce domain name mismatch warnings, we have also included the domain name www.hqidi.com in your certificate.

就是说颁发的证书也适用于www.hqidi.com子域,以应付那些一定要加www访问的可爱人士。
邮箱附件就是证书文件,解压后得到两个文件,一个hqidi_com.ca-bundle是证书链,另外一个hqidi_com.crt就是证书了。

开启HTTP/2支持

Nginx官方文档里面写到,要支持HTTP/2,得两个必要条件,nginx版本至少是1.9.5,openssl版本至少是1.0.2。
看到这里,心急的朋友可能马上就想要升级openssl版本了,在生产环境,这是非常不可取的,openssl和系统的关联性很大,至少跟SSHD服务是密切相关的。若你冒然升级openssl,万一出现问题,那就是“机房那么大,你得去看看”。我们只需在编译nginx的时候,告诉编译程序把最新的openssl库也编译进去就行了。

cd download
wget https://www.openssl.org/source/openssl-1.1.0f.tar.gz
tar xf openssl-1.1.0f.tar.gz

然后在nginx的源码目录重新configure,最主要的就是添加上--with-http_ssl_module --with-http_v2_module --with-openssl=/root/download/openssl-1.1.0f

./configure --user=www --group=www --prefix=/usr/local/nginx   --with-http_gzip_static_module --with-http_realip_module  --with-http_addition_module --with-http_ssl_module --with-http_v2_module --with-openssl=/root/download/openssl-1.1.0f
make

检查下是否正常编译进去了openssl-1.1

[root@hqidi nginx-1.12.0]# objs/nginx -V
nginx version: nginx/1.12.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) 
built with OpenSSL 1.1.0f  25 May 2017
TLS SNI support enabled

可以看到 nginx 相关联的OpenSSL版本已经变成1.1.0f,把新编译出来的nginx移动到/usr/local/nginx/sbin目录,HTTP/2支持到此搞定。

图片问题

原来图片放在七牛,通过http://img.hqidi.com/1/whoami.gif引用,img.hqidi.com绑定在七牛的bucket上,后面的/1/是本博客的文章ID,最后是文件名。
现在要这样引用:https://hqidi.com/img/1/whoami.gif,这样就不用通配符证书了,因为我自己的PC上有跟七牛目录结构一样的一个备份,所以直接打包本地的img目录上传到网站根目录了事。

链接问题

直接动数据库,在改数据库前,后台常规设置中的“WordPress地址”和“站点地址”需要变更为https的方式。否则,改好数据库后无法登录后台。提示:“错误:Cookies被阻止或者您的浏览器不支持。要使用WordPress,您必须启用cookies。”
网上有各种各样修改链接的方法,居然还有通过插件修改的建议,那PHP程序得多耗资源啊。我是直接改数据库,先用mysqldump把整个网站的数据库导出,然后多备份几份。然后用Notepad++直接修改mysqldump导出的备份文件。先把img.hqidi.com全部替换成hqidi.com/img,然后再把http://hqidi全部替换成//hqidi,为什么不替换成https://hqidi呢,原因有二,第一,//hqidi比https://hqidi要少几个字节。第二,//hqidi同时兼顾http://和https://访问,进退自如。对于 // 开头的 URL,浏览器会自动补上当前页面协议去请求。

https重定向问题

首先当然是把原来的http请求重定向到https的问题,网上重定向的写法很多,我们看官方文档

所以重定向到https最好是用BETTER的写法。

HTTPS配置文件

证书文件的相对路径为nginx.conf配置文件所在目录,把获取到的证书文件和自己的密钥放到nginx.conf同一个目录。
配置文件可以点击这里生成,选择Intermediate的配置就行,当然,如果你的网站无视那些用上古浏览器的用户的话,可以用激进的配置。

listen 80;
server_name hqidi.com www.hqidi.com;
return 301 https://hqidi.com$request_uri;

listen 443 http2 fastopen=3 reuseport;
ssl on;
ssl_certificate hqidi_com.crt;
ssl_certificate_key hqidi.key;

ssl_session_cache shared:SSL:20m;
ssl_session_timeout 60m;

开启 Tcp Fast Open 和关闭 ipv6

Tcp Fast Open,字面意思,tcp快速打开,所以我们得开启,但这个我还没彻底弄清。在百科上说, Tcp Fast Open在内核版本3.13开始默认打开,而开源中国却说内核版本得3.7.1才支持。不纠结这个,我们先在nginx的配置文件里面开启再说

server {
    listen              443 ssl http2 fastopen=3 reuseport;
}

然后修改 /etc/sysctl.conf 来完成启用。
关闭 ipv6 的原因主要是部分浏览器开启 ipv6 后会优先走 ipv6,导致速度很慢。

net.ipv4.tcp_fastopen = 3
net.ipv6.conf.all.disable_ipv6 = 1

阿里云的ECS是默认关闭ipv6的,/etc/sysctl.conf文件里面加入上面两行后,执行sysctl -p让修改生效。

HTTPS会话保持

要握六次手,才能建立一个https连接,可不能轻易断开。SSL / TLS的几乎所有开销都是在初始连接建立过程中,因此通过缓存会话的连接参数,将大大改善后续请求。修改如下两行

ssl_session_timeout 60m;
ssl_session_cache shared:SSL:20m;

根据nginx官方文档,1MB可以存储约4000个会话,20M应该很够了。
至于会话超时时间,不低于10分钟就行,我上面设的是60分钟。

HTTPS CDN

我选用的是verycloud.cn提供的CDN服务,每月提供50G的https免费流量,而且国庆期间也有技术客服24h在线,技术水平还不低,虽然他把HTTP/2 说成 HTTP/2.0弄的有点别扭。
添加自己的证书可以参考张戈的博客,https://zhangge.net/5078.html,只是有一个地方要注意,

在CA机构证书那里,把证书链上传了(人是活的,namecheap发来的证书链文件后缀改成.crt后上传),否则,Android设备访问网站的时候,会提示“当前网站证书不可信,且证书链长度为1”,苹果设备和PC都是正常显示小绿锁的。

速度对比

http速度

直接访问源站HTTP/2的速度:

最终访客,过CDN的速度,昨天测还是SPDY 协议的,今天突然支持H2了。

如果是对安全性要求不高的场合,为了提高网页性能,建议不要采用保密强度很高的数字证书。一般场合下,1024位的证书已经足够了,2048位和4096位的证书将进一步延长SSL握手的耗时。

最终效果


以国人朋友圈表现出来的智商,看到“安全”两个字,哪怕是pingguoid.com都会认为是苹果官方网站,然后被钓鱼。坐等chrome因为这两字被起诉的那天。

原创文章,转载请注明: 转载自笛声

本文链接地址: 网站上HTTPS

]]>
https://hqidi.com/102.html/feed 34