標籤:

TLS完全指南(零)

目錄

  1. TLS和安全通信
  2. OpenSSL操作指南
  3. 用Go語言寫 HTTPS 程序

為什麼要寫這篇文章

TLS很有用

一般來說,大家會覺得 TLS 是典型的系統工程問題,通常只有要寫 HTTPS server 的人才會關注。可實際上 TLS 設置和公司的域名相關,和公司打算提供 的 Web 服務相關,是 CEO 或者至少 CTO 應該了解的。

我曾經以為干機器學習的研究員們一輩子也不需要碰 HTTPS —— 寫 demo 的話寫 一個 HTTP 服務就好了。可是最近二十年來機器學習技術的發展,大都是圍繞著 越來越強大的計算能力展開的。當我們開始琢磨用 Kubernetes 搭建能支持公司 各種業務的通用計算機群的時候,發現機群的安全性是一個關鍵要素。為了理解 安全性,我發現必須深入理解 TLS。

現有文章說不明白

我以為應該很容易找到 TLS 的資料,因為那麼多大大小小的公司都需要配置 HTTPS 服務。可是我於2016年下半年花了很長時間找到和閱讀了數十篇相關文章 (部分見參考文獻),卻沒有一篇全面覆蓋了以下幾個方面:

  1. TLS 解決的問題和利用的密碼學原理,
  2. 實踐操作,比如用openssl生成秘鑰和CSR、簽署certificate。配置根證書和 信任鏈,
  3. 如何寫一個 HTTP server 和對應的client。

絕大多數文章針對某個具體(配置或者編程或者商業規劃)問題,一開口就是專 家的語氣給建議,缺少邏輯推導過程,令人不知其所以然,也就不敢信其然。更要命的是,有很多文章里有這樣那樣的錯誤信息,令人迷惑。

剩下的有用的文章里,往往對上述三方面問題有所側重,而不全面。相對全面的 是這篇中文文章,但也是 偏重於用Go語言寫 HTTPS server 和 client。所以我想寫一篇三部分的全面指 南,總結這段時間的探索和學習過程。

參考文獻

  • How SSL and TLS works
  • Go和HTTPS | Tony Bai
  • IBM Knowledge Center
  • CoreOS
  • Creating a Self-Signed SSL Certificate
  • SSL Endpoint | Heroku Dev Center
  • gist.github.com/denji/1
  • Using self-signed SSL certificates
  • How do I create a PEM file from the certificates I received from you?
  • What is a CSR (Certificate Signing Request)?

推薦閱讀:

為什麼SSL證書那麼貴?
使用了不受支持的SSL協議是怎麼回事?
如何看待 CNNIC 官方網站的證書改換成了 DigiCert 簽發的證書?
Chrome下HTTPS證書的「沒有公開的審核記錄」是什麼意思?

TAG:SSL |