知識:Istio-TLS termination && 證書底層知識


mTLS

mTLSMutual TLS(雙向TLS認證) 的縮寫

讓我們使用 curl 演示 mTLS 過程

首先, 我們需要一個 clientserver 都信任的 certificate authority(CA)
CA 就是一個 public keyprivate key
其中 public key 包含在自簽名的 X.509證書 中.
使用下面的命令創(chuàng)建 CA

openssl req \
  -new \
  -x509 \
  -nodes \
  -days 365 \
  -subj '/CN=my-ca' \
  -keyout ca.key \
  -out ca.crt

上述命令會產(chǎn)出2個文件: ca.keyca.crt , 使用 PEM格式. 其中

  • ca.keyprivate key(私鑰)
  • ca.crtX.509證書 , 其中包含 public key

使用 openssl x509 -in ca.crt -text -noout 查看證書內(nèi)容
通過查看證書內(nèi)容残邀,我們可以確認以下幾點:

  • SubjectIssuer 都是 CN = my-ca , 這表明該證書是自簽名的
  • Validity 表明證書有效期是一年
  • X509v3 Basic Constraints 的值 CA:TRUE 表明該證書可以用做 CA , 即可以用來簽署證書
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            [OBMITTED]
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN = my-ca
        Validity
            Not Before: Mar  7 00:00:19 2021 GMT
            Not After : Mar  7 00:00:19 2022 GMT
        Subject: CN = my-ca
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    [OBMITTED]
                Exponent: [OBMITTED]
        X509v3 extensions:
            X509v3 Subject Key Identifier: 
                [OBMITTED]
            X509v3 Authority Key Identifier: 
                keyid:[OBMITTED]
            
            X509v3 Basic Constraints:
                CA:TRUE
    Signature Algorithm: sha256WithRSAEncryption
         [OBMITTED]

然后,創(chuàng)建Server端的private key和證書
首先創(chuàng)建 server端private key
執(zhí)行下面的命令, 該命令會產(chǎn)生1個文件: server.key , 即 server端private key

openssl genrsa \
  -out server.key 2048

然后創(chuàng)建 server端證書
(1) 先創(chuàng)建 Certificate Signing Request (CSR) , 下面的命令會產(chǎn)生1個文件: server.csr , 該文件用于第2步生成 server端證書
CN(Common Name) 填寫 server的hostname , 本例中為 localhost

# 先創(chuàng)建 CSR
openssl req \
  -new \
  -key server.key \
  -out server.csr

(2) 創(chuàng)建 server端證書 , 下面的命令會產(chǎn)生1個文件: server.crt , 即 server端證書 , 使用 PEM格式

openssl x509 \
  -req \
  -in server.csr \
  -CA ca.crt \
  -CAkey ca.key \
  -CAcreateserial \
  -days 365 \
  -out server.crt

使用 openssl x509 -in ca.crt -text -noout 查看證書內(nèi)容
通過查看證書內(nèi)容凿叠,我們可以確認以下幾點:

  • IssuerCN = my-ca , 這表明證書是由 my-ca證書頒發(fā)機構(gòu) 簽名的
  • SubjectCN = localhost , 這表明可以將該證書提供給客戶端,以驗證服務器是否可以信任DNS名稱localhost的內(nèi)容
  • Validity 表明證書有效期是一年
Certificate:
    Data:
        Version: 1 (0x0)
        Serial Number:
            [OBMITTED]
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN = my-ca
        Validity
            Not Before: Jun 13 00:50:18 2020 GMT
            Not After : Jun 13 00:50:18 2021 GMT
        Subject: CN = localhost
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    [OBMITTED]
                Exponent: [OBMITTED]
    Signature Algorithm: sha256WithRSAEncryption
         [OBMITTED]

然后,創(chuàng)建Client端的private key和證書
過程同上

然后,使用curl攜帶客戶端證書訪問服務器

curl \
 --cacert ca.crt \
 --key client.key \
 --cert client.crt \
 https://localhost:3000

除了 --cert參數(shù) 之外,其他參數(shù)還要簡單說明一下:

  • --cacert 是為了驗證 server端證書
  • --key 是為了發(fā)送請求內(nèi)容時進行私鑰加密

TLS Termination

TLS Termination 主要作用是,作為一個 前置代理服務器 接收外部到達的加密TLS流量 瞧省, 然后將其 解密為HTTP明文 营密, 最后再將流量 轉(zhuǎn)發(fā)到內(nèi)部的某個服務

image.png

TLS Origination

TLS Origination 主要作用是 作為一個 代理服務器, 接收內(nèi)部服務的HTTP明文流量 扔嵌,然后將其 加密 掖桦,最后 轉(zhuǎn)發(fā)到一個HTTPS服務 上,該服務既可以是內(nèi)部供汛,也可以是外部的枪汪,但看起來就像是一個內(nèi)部的服務。

image.png

作為與邊界入口網(wǎng)關(guān)對立的存在怔昨,出口網(wǎng)關(guān)也通常放置在網(wǎng)絡的邊界雀久。
所有的出口流量都被它接管,在這個節(jié)點上我們可以 統(tǒng)一實施一些訪問控制策略 趁舀,或監(jiān)控赖捌,或日志等,這和 Ingress 的功能其實是一樣的矮烹,最大的不同在于 將明文流量加密再轉(zhuǎn)發(fā) 越庇。

我們對向外主動請求的流量常常是不設(shè)防的,這樣的嚴進寬出在安全要求較高的場合是不合適的奉狈。
了解了 Egress 這個概念后卤唉,不僅僅是在安全上對我們的業(yè)務有幫助,對于業(yè)務架構(gòu)的設(shè)計其實也是有所裨益的仁期。

考慮一個基于微信的服務桑驱,可能會有公眾號,小程序跛蛋,還可能會有多個小程序和公眾號熬的,更復雜一些,設(shè)計成微服務赊级,不同的服務可能會調(diào)用同一公眾號的微信接口押框。
那么問題來了, API access token 的存取就出現(xiàn)了競爭此衅,我們可以做一個獨立的服務强戴,將各種token的獲取亭螟,刷新和緩存封裝起來,所有的服務需要用到token時直接通過 token-server 獲取即可骑歹。
這種辦法是可以的预烙,雖然每次微信請求接口調(diào)用都產(chǎn)生了一次額外的內(nèi)部rpc調(diào)用,性能上其實可以忽略不計道媚,
麻煩的是代碼可能不會簡潔扁掸,更重要的是 對這些外發(fā)接口調(diào)用的監(jiān)控 ,日志沒有一個統(tǒng)一的地方處理最域。
我們還可以做得更好谴分,簡單的架構(gòu)如下:

image.png

在內(nèi)部服務中,所有調(diào)用微信API的協(xié)議均使用HTTP镀脂,然后這些請求都會經(jīng)過 wx-egress-server 牺蹄,它會給請求附加合適的 access token ,通過 HTTPS 協(xié)議發(fā)往外部的微信服務器薄翅。
除此以外沙兰,我們還可以 增加日志便于調(diào)試 ,監(jiān)控請求的成功率翘魄,甚至發(fā)起重試等等鼎天,這樣相對原來的方案要更靈活。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末暑竟,一起剝皮案震驚了整個濱河市斋射,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌但荤,老刑警劉巖罗岖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異腹躁,居然都是意外死亡呀闻,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門潜慎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捡多,“玉大人,你說我怎么就攤上這事铐炫±菔郑” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵倒信,是天一觀的道長科贬。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么榜掌? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任优妙,我火速辦了婚禮,結(jié)果婚禮上憎账,老公的妹妹穿的比我還像新娘套硼。我一直安慰自己,他們只是感情好胞皱,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布邪意。 她就那樣靜靜地躺著,像睡著了一般反砌。 火紅的嫁衣襯著肌膚如雪雾鬼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天宴树,我揣著相機與錄音策菜,去河邊找鬼。 笑死酒贬,一個胖子當著我的面吹牛做入,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播同衣,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼壶运!你這毒婦竟也來了耐齐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤蒋情,失蹤者是張志新(化名)和其女友劉穎埠况,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體棵癣,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡辕翰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了狈谊。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喜命。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖河劝,靈堂內(nèi)的尸體忽然破棺而出壁榕,到底是詐尸還是另有隱情,我是刑警寧澤赎瞎,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布牌里,位于F島的核電站,受9級特大地震影響务甥,放射性物質(zhì)發(fā)生泄漏牡辽。R本人自食惡果不足惜喳篇,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望态辛。 院中可真熱鬧麸澜,春花似錦、人聲如沸因妙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽攀涵。三九已至铣耘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間以故,已是汗流浹背蜗细。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留怒详,地道東北人炉媒。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像昆烁,于是被迫代替她去往敵國和親吊骤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容