绕开阿里云域名备案: http服务升级到https小结之 如何绕开阿里云&腾讯云烦人的备案

原由:

博客以前一直serve在github.io上面,因为github访问速度实在是慢,因此打算迁移到本身买的阿里云服务器上。nginx

可是,当我把本身的域名解析到阿里云服务器上时, wtf,返回的页面竟然是一个阿里云的页面,要求我对服务器进行备案。git

备案?emmm...能够接受。我点进去, 结果发现下面这些东西。。。。 github

image.png

20个工做日!还能不能让人好好玩耍了!web

因此如何绕开烦人的备案? 我发现当我只是经过ip访问时, 一切正常; 当我使用域名访问时,则返回阿里云的备案页面。而个人域名又是在腾讯云买的, 因此能够判定:这是一块儿http劫持事件浏览器

阿里云劫持了个人http请求,判断是经过域名访问, 则篡改个人http响应。如何解决呢?https能够完美解决这种问题。服务器

这里你们好像都奇怪为何https能够绕过备案,我补充一下:https会对数据进行加密,能够避免中间商对数据进行修改。常常发现登录某些网站被植入联通的广告,实际就是运营商修改了响应。若是换成https,运营商将没法篡改你的响应。session

Let's Encrypt

黑喂狗,下一步就是要让服务能够经过https来访问。网站

那么问题来了,https要求有一张受浏览器信任的证书。这时, Let's Encrypt 做为一个免费、受信任广的证书签发机构,天然成为了个人首选。阿里云

可是,就在这时,我踩了两个坑。加密

腾讯云域名解析

image.png

let's encrypt是一家境外的CA, 因此在选择线路类型时须要选择默认。我当时选择了境内而不自知,费了一番功夫才发现原来境外解析不了这个域名。

阿里云的篡改http响应

let's encrypt 给你签发证书的条件是证实这个域名是你的。 有两种方式, 一种是webroot, 即你在你的域名解析到的服务器的80端口上serve一个let's encrypt 指定的页面。即我访问http://www.example.com/letsencrypt,返回的须要是let's encrypt指定的文本。 我一开始就是用的这种方式,使用了let's encrypt 的certbot的webroot模式去验证。结果发现TM返回的response被阿里云劫持了。发现这里绕了个圈,又回来了。

还好let's encrypt提供了另外一种方式:域名解析指定的txt。这就好办多了, 相似下面这样配置域名解析就能够了:

image.png

而后你能够得到let's encrypt给你签发的证书, 在/etc/letsencrypt/live/域名/路径下。

上nginx配置

最后用nginx 为你的服务serve一下便可。上nginx配置:

server {
        listen       443 ssl http2 default_server;
        listen       [::]:443 ssl http2 default_server;
        server_name  _;
        root         /root/workspace/eltonzhong.github.io;

        ssl_certificate "/etc/letsencrypt/live/therollingstones.cn/cert.pem";
        ssl_certificate_key "/etc/letsencrypt/live/therollingstones.cn/privkey.pem";
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;
}
复制代码

The end

整体仍是蛮简单的,只要不像我同样愚蠢地踩到腾讯云域名解析路线的坑便可。 谢谢阅读,若是以为有帮助,能够点个赞吗~谢谢!

相关文章
相关标签/搜索