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。
第一步取得 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