當前位置:
首頁 > 最新 > 安全生產 人人有責

安全生產 人人有責

甩手將軍的Kubernetes集群里已經運行著不少服務了:Minio給家中提供了一個類似s3的對象存儲空間以及為Helm提供倉庫後台、Gogs作為一個私有的Git代碼倉庫(不用每個月再付錢給Github了)、Harbor提供私有Docker鏡像倉庫、Nexus提供私有Maven倉庫、Jenkins負責持續集成。這些程序足夠支撐起一條持續交付的流水線,但它們也無一例外都有一個缺點:所有的服務都沒有使用HTTPS,也就是說,它們都在裸奔

至於沒有HTTPS的危害,甩手將軍就不贅述了,無非就是數據傳輸沒有加密,用戶隱私容易被窺探云云。但裸奔的另外一大危害大家都視而不見:就是沒有面子嘛!人家正正噹噹的網站都有安全證書,輪到我就是not secure,用戶該怎麼看我?這個問題一定要解決!

HTTPS就是HTTP over TLS。HTTP很多人都懂,一般就可以看作傳輸網頁數據的一種格式,而TLS(全名Transport Layer Security)就是一套確保數據傳輸安全的協議。這套協議中與我們相關的就是公鑰私鑰機制。私鑰藏口袋裡,公鑰給別人。

三種方案

獲取安全證書一般有幾種途徑:

問別人買。這裡的別人有一個很權威的名字,叫Certificate Authority。他們負責鑒別你媽是你媽。哦說錯了,他們負責鑒別你是你。他們分發的證書是有償的,而且一般是有有效期的。有效期滿,親趕緊來續個費吧。

Let"s Encrypt。大約在2016的時候,這家叫做Let"s Encrypt的公司讓大家感到很驚艷。為什麼呢?因為他們家作為Certificate Authority,居然免費給人發證書。他們鑒別「你是你」的辦法也有些新奇:通過DNS記錄或者網站資源來證明你的確擁有你申明的域名。有點像:你說你家有個鑼,那你敲一下我聽聽唄。

自己當Certificate Authority。聽起來有點自欺欺人啊,但其實這種方式也是相當常見的。對於公司內部來說,證明「我是我」的哲學題並不存在,而自己發證書不受數量和時間的限制,相當經濟實惠。

如果有讀甩手將軍之前的文章,你一定知道我對「花錢買證書」這種事情不太感冒,一張外卡證書(可以在不限數量的子域名上用)每年要耗費400美金。我們小打小鬧何必花這個錢。而同樣的,Let"s Encrypt也不適用,甩手將軍的集群完全是基於家中區域網的,我敲的鑼,Let"s Encrypt在公網上聽不見。那麼剩下的,就只能是自己當Certificate Authority了。

自欺欺人做CA

作為Certificate Authority,我們需要有一把根私鑰(Root Key)。我們接下來會用這把鑰匙去加密別的證書,所以千萬要藏好,最好再加上密碼保護。我們如下生成2048位的秘鑰,再用des3加上對稱加密的密碼保護。

接下來,我們要生成對這個私鑰的簽名(證書)。既然是監守自盜,甩手將軍直接把有效期設置到100年。

至此,我們已經擁有了root.key和root.pem兩個文件。下一步,我們需要把生成的證書安裝的操作系統里,這樣以後用這張證書生成的其他子證書也會得到操作系統的信任。以OS X為例:雙擊root.pem,會進入KeyChain。

很顯然,我們自己生成的證書,並沒有得到系統的信賴。解決方法很簡單:右鍵進入Get Info菜單,並把證書設置為Always Trust。

在密碼確認後,我們可以看到操作系統已經信任我們生成的證書。

開始發證書

然後,不同於Certificate Authority,我們不能自己私自簽名,而必須請求Certificate Authority給我們簽名,所以要生成一個簽名請求(csr):

至此,我們擁有了gogs.key和gogs.crt兩個文件。私鑰和證書都齊全了,接下來可以著手安裝它們了。

安裝證書

安裝證書的方法在不同環境下有不小的差異,本節只簡單描述在Kubernetes下如何安裝TLS證書。Kubernetes採用Secret資源來儲存這些需要加密的東西,故新建gogs-tls-secret.yaml:

其中BASE64_ENCODED_CERTIFICATE和BASE64_ENCODED_KEY可以通過以下獲得:

然後在Ingress資源里引用gogs-tls-secret:

甩手將軍 努力周更中


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 甩手將軍 的精彩文章:

家庭網路存儲-配置篇
家用網路存儲-要求篇

TAG:甩手將軍 |