TLS/SSL 安全性憑證 與 HTTP/2

https://www.kingman.idv.tw/internet-genaration/180-what-ssl-how-choose.html

SSL依據驗證等級分為EV、OV、DV三種等級,不同等級驗證的項目不同,通常一個SSL證書給一個網站使用,但是也有部份CA單位簽發子網域通用、甚至跨不同網域的SSL證書,可以同時給多個網站使用。

如果是OV、EV等級的SSL,需要洽詢SSL簽證單位,付費申請SSL,常見的簽證單位有Comodo、Kaspersky等… 台灣則有TWCA提供SSL簽證服務。

如果是一般的個人Blog網站,或者小型、微型企業的官方形象網站,想要避免出現不安全警告、提供使用者安全瀏覽環境,並獲得SEO加分,有幾個辦法可以取得免費的DV SSL憑證:

Free SSL憑證:

AWS Certificate Manager
如果使用AWS的雲端主機服務,可以透過AWS Certificate Manager取得免費的SSL,Amazon申請成為CA機構,讓使用AWS的客戶都可以藉此獲德免費的SSL憑證,並免去安裝、管理的麻煩。

cPanel憑證
如果網站的虛擬主機使用cPanel公司的後台管理系統,在cPanel介面內可以設定、取得cPanel發出的憑證,或者建立虛擬主機的時候就會自動安裝、擁有網域憑證,要使用cPanel憑證請洽租賃虛擬主機的公司,基本上cPanel憑證不需要特別申請、安裝,只要虛擬主機建立好之後就會自動簽發、取得憑證,只需要將網站設定好就可以直接使用https連線。

Let's Encrypt
Let's Encrypt是由Google、Facebook、Cisco、Mozilla等單位贊助成立的CA憑證機構(ISRG),主旨是希望能夠有更安全的網路瀏覽環境,因此為每一個網域提供免費的DV SSL憑證。
Let's Encrypt的SSL安裝需要透過伺服器去設定、取得憑證,並自動展期、或者更新憑證,這部份比較麻煩,且需要一些技術基礎,如果會使用一般的CRT憑證安裝方式,可以去SSL For Free網站申請並取得SSL憑證安裝資料,SSL For Free透過網頁介面協助我們從Let's Encrypt取得SSL憑證,並導出CRT、KEY、CABUNDLE等SSL憑證安裝資料。唯一麻煩的是Let's Encrypt的憑證效期比較短,需要經常重設憑證。



https://ihower.tw/blog/archives/8489

HTTP/2 是 HTTP/1.1 從 1999 年發布以來,十六年來最重要的一次升級。HTTP/2 這項技術可以讓網站瀏覽更快、更安全、SEO 加分,而且網站工程師不需要改 code 就可以全站使用。

關於 HTTP/2 的歷史,由 SPDY 這個通訊協定開始。SPDY 是 Google 狹著 Chrome 瀏覽器龐大市佔率,在 2009-2016 年所進行的大規模網路實驗,在獲得了顯著的成功之後,進一步將 SPDY 推向網路標準,終於在 2015/5 正式發布。目前包括 Chrome、Safari、Firefox、IE/Edge 瀏覽器都已經支援,在不知不覺中,HTTP/2 已經進入使用者的生活。

為了能夠順利讓瀏覽器相容現存的 HTTP 網站 (使用通訊埠 Port 80),所以 HTTP/2 選擇佈署在 HTTPS (使用通訊埠 Port 443) 上,因此在安裝 HTTP/2 的步驟中,要先擁有 TLS/SSL 安全性憑證。

使用 HTTPS 加密連線的好處有:
  • 保護瀏覽器和伺服器之間的傳輸,不會被別人修改。這不一定指惡意的駭客進行中間人攻擊,也可能只是想插入廣告。例如有些咖啡店的免費 Wifi 會在網頁上面插入廣告。但是如果是 HTTPS 網站就沒辦法了。
  • 保護了使用者的隱私安全,不會被人竊聽。特別是需要登入的網站,沒有 HTTPS 加密,非常容易就可以被人竊取帳號密碼。
  • SEO 加分。
  • 方可與新技術或重要服務整合。很多新的瀏覽器功能已經把 HTTPS 當作必要條件,例如 Geolocation 定位、ServiceWorker 等。此外,所有 iOS app 的網路連線都必須使用加密連線 HTTPS。
為了推廣 HTTPS 安全連線,由許多團體共同贊助推出 Let's Encrypt 這個服務,免費發佈 TLS/SSL 憑證。中文使用說明可以參考 https://letsencrypt.tw,或是用 Certbot 這個工具。不過因為它的使用方式,跟一般我們在憑證機構網站上購買的步驟不太一樣,需要在主機上下指令來取得憑證,所以也有人設計了一個線上工具 SSL For Free 可以在線上就完成憑證申請。

第一步取得 TLS/SSL 安全性憑證,第二步設定 Web 伺服器,如果上述的兩個步驟還是太麻煩,也可以使用 CloudFlare 這個網站加速服務(CDN),它有免費方案提供 TLS/SSL 憑證以及 HTTP/2 連線。也就是說網站伺服器也可以什麼都不用改,只需要修改 DNS 讓使用者的連線先經過 CloudFlare 伺服器即可。使用者到 CloudFlare 的這一段傳輸,就會是有加密的 HTTP/2 連線。CloudFlare 在全球各地都有節點,所以網路速度非常好。

第三步:替換 HTTP 網址為 HTTPS

需要將所有 HTTP 網址都換成 HTTPS 網址。網頁上所有連到自己網站的超連結、圖片、JavaScript 和 CSS 等等網址,都必須修改成 https:// 開頭。而所有外部系統中自己的網址,例如 Facebook 廣告、Google Analytics 和其他網站分析追蹤工具,都必須把網址改成 https:// 開頭。

第四步:最後檢查

先檢查 TLS/SSL 安全性憑證安裝正確,可以使用 SSL Server Test 這個線上工具。接著啟用 HTTP/2 ,可以安裝 HTTP/2 and SPDY Indicator。線上測試工具則可以用 HTTP/2 Test。更多工具可以參考 Tools for debugging, testing and using HTTP/2

第五步:全面啟用

檢查沒有問題後,可以設定 Web 伺服器只允許 HTTPS 連線,所有連線到 HTTP 的情求,全部轉址 (301 Redirect) 到 HTTPS 連線,並且打開 HSTS 這個 HTTP Header 強制使用者瀏覽器只能用 HTTPS 連線。

最後的成果就是會有一個綠色的 Icon 出現在網址列。




Golang 網頁伺服器 申請 Let's Encrypt 的 HTTPS 實現證書自動部署 (一個說明清楚的簡潔作法):https://www.golangnote.com/topic/211.html

手動模式申請Let's Encrypt萬用字元證書:https://itw01.com/QCJTFEH.html

利用golang申請Let's Encrypt的HTTPS實現證書自動部署:https://itw01.com/YB75DED.html

https://blog.wu-boy.com/2017/04/1-line-letsencrypt-https-servers-in-golang/

https://github.com/golang/go/issues/14374

https://golang.org/pkg/net/http/

https://studygolang.com/articles/10380

https://github.com/golang/go/issues/21890

https://stackoverflow.com/questions/37321760/how-to-set-up-lets-encrypt-for-a-go-server-application

https://stackoverflow.com/questions/37536006/how-do-i-rewrite-redirect-from-http-to-https-in-go?noredirect=1&lq=1



Let’s Encrypt 相關備忘

Let's Encrypt 终于支持通配符证书了
https://studygolang.com/articles/12599

什么是通配符证书
在没有出现通配符证书之前,Let’s Encrypt 支持两种证书。

1)单域名证书:证书仅仅包含一个主机。

2)SAN 证书:一张证书可以包括多个主机(Let’s Encrypt 限制是 20),也就是证书可以包含下列的主机:www.example.com、www.example.cn、blog.example.com 等等。

证书包含的主机可以不是同一个注册域,不要问我注册域是什么?注册域就是向域名注册商购买的域名。

对于个人用户来说,由于主机并不是太多,所以使用 SAN 证书完全没有问题,但是对于大公司来说有一些问题:

子域名非常多,而且过一段时间可能就要使用一个新的主机。
注册域也非常多。
读者可以思考下,对于大企业来说,SAN 证书可能并不能满足需求,类似于 sina 这样的网站,所有的主机全部包含在一张证书中,而使用 Let’s Encrypt 证书是无法满足的。

Let’s Encrypt 通配符证书
通配符证书就是证书中可以包含一个通配符,比如 .example.com、.example.cn,读者很快明白,大型企业也可以使用通配符证书了,一张证书可以防止更多的主机了。

这个功能可以说非常重要,从功能上看 Let’s Encrypt 和传统 CA 机构没有什么区别了,会不会触动传统 CA 机构的利益呢?

如何申请 Let’s Encrypt 通配符证书
为了实现通配符证书,Let’s Encrypt 对 ACME 协议的实现进行了升级,只有 v2 协议才能支持通配符证书。

在了解该协议之前有几个注意点:

1)客户在申请 Let’s Encrypt 证书的时候,需要校验域名的所有权,证明操作者有权利为该域名申请证书,目前支持三种验证方式:

dns-01:给域名添加一个 DNS TXT 记录。
http-01:在域名对应的 Web 服务器下放置一个 HTTP well-known URL 资源文件。
tls-sni-01:在域名对应的 Web 服务器下放置一个 HTTPS well-known URL 资源文件。

註解:tls-sni-01 將於 February 13th, 2019 完全停用。取而代之的是 HTTP-01, DNS-01 or TLS-ALPN-01 三種。

而申请通配符证书,只能使用 dns-01 的方式




解析 Certbot(Let's encrypt) 使用方式
https://andyyou.github.io/2019/04/13/how-to-use-certbot/

Golang 配置 Let's encrypt
https://stackoverflow.com/questions/37321760/how-to-set-up-lets-encrypt-for-a-go-server-application

2019 年因為安全理由需要升級 Golang 配置  Let's encrypt 的方法
https://github.com/golang/go/issues/21890

實作解決方案 => Golang 官方網站:
https://godoc.org/golang.org/x/crypto/acme/autocert#example-Manager

對官方網站實作的中文解說 (代碼有誤) 與關於這個包的設計的英文討論:
https://colobu.com/2017/09/30/use-letsencrypt-in-go/
https://github.com/golang/go/issues/17053

其他參考資料:
https://community.letsencrypt.org/t/help-with-golang-autocert/75806
https://ericchiang.github.io/post/go-letsencrypt/
https://studygolang.com/articles/10380
https://studygolang.com/articles/16463
https://itw01.com/YB75DED.html
https://github.com/mholt/certmagic


程式語言編年史

程式語言編年史原文 下面這張圖片描繪了整個程式語言的歷史。包括各種程式語言的發明人、程式語言的特點和適用領域、被什麼網站或公司使用等 (檢視 完整高清圖 )。 之所以會有那麼多不同的程式語言是因為設計程式語言的初衷不同、對語言學習曲線的追求不同、不同程式之間的執行成本差異...