繞開阿里雲域名備案: 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

整體仍是蠻簡單的,只要不像我同樣愚蠢地踩到騰訊雲域名解析路線的坑便可。 謝謝閱讀,若是以爲有幫助,能夠點個贊嗎~謝謝!

相關文章
相關標籤/搜索