九個(gè)問(wèn)題從(cóng)入門(mén)到β↔©(dào)熟悉 HTTPS

2018-03-29 14:53

HTTP 協議(yì)中的(de)內(nè×↕i)容都(dōu)是(shì)明(míng)文(wén)傳輸,HTTPS 的(∑•Ωde)目的(de)是(shì)将這(zhè)些(xiē)內(nèi)容加密,确✔₽☆保信息傳輸安全。最後一(yī)個(gè)字母 S 指的(de)是(s<×hì) SSL/TLS 協議(yì),它位于 HTTP 協議(yì)與←‍'₩ TCP/IP 協議(yì)中間(jiān)。

 

Q2: 你(nǐ)說(shuō)的(de)信息傳∏↓輸安全是(shì)什(shén)麽意思

BS: 信息傳輸的(de)安全有(yǒu)三個(gè)方面:

 

  1. 客戶端和(hé)服務器(qì)直接的(de)通(tōng)♣γ♦≤信隻有(yǒu)自(zì)己能(néng)看(kàn)懂(dγ↑ǒng),即使第三方拿(ná)到(dào)✔'&♠數(shù)據也(yě)看(kàn)不(bù)懂(dǒng)這(zhè©←λ)些(xiē)信息的(de)真實含義。
  2. 第三方雖然看(kàn)不(bù)懂(dǒ♣'ng)數(shù)據,但(dàn)可(kě)以 XJB 改,‍€因此客戶端和(hé)服務器(qì)必須有(yǒu)能(néng)力判α" 斷數(shù)據是(shì)否被修改過。βδ
  3. 客戶端必須避免中間(jiān)人(rén)攻擊,即®¥除了(le)真正的(de)服務器(qì),任何第三方都(dōu)無法冒"β♠充服務器(qì)。

 

很(hěn)遺憾的(de)是(shì),目前的(de) HTTP 協議(y€™'ì)還(hái)不(bù)滿足上(shàng)述三♠ε☆♥條要(yào)求中的(de)任何一(yī)條。

 

Q3: 這(zhè)麽多(duō)要(yào)求,一(yī)個(gè)一(yī)個(​πφgè)去(qù)滿足是(shì)不(bù)是(shì)很(hěn)累?

BS: 不(bù)累,第三個(gè)要(yào)求π≤↔✔可(kě)以不(bù)用(yòng)管

 

是(shì)的(de),我沒開(kāi)玩(wán)笑(xiào),你(nǐ←¶↓)可(kě)以暫時(shí)别管第三個(gè)要(yào)™∑♦求,因為(wèi)它實際上(shàng)隸屬于第一(yī)個(gè)需求。我們™♣都(dōu)知(zhī)道(dào)加密需要(yào)密碼,密碼不(bùβ )是(shì)天下(xià)掉下(xià)來(lái),也(yě)得(de)♦π☆®需要(yào)雙方經過通(tōng)信才λ↕≤←能(néng)協商出來(lái)。所以一(yī)個(gè↓≈Ω)設計(jì)良好(hǎo)的(de)加密機(jī)制(zhì  ☆)必然會(huì)防止第三者的(de)幹擾和(hé)僞造。等搞↕πΩ明(míng)白(bái)了(le)加密的(de)具體(tǐ)原理(lǐ)®Ω≈π,我們自(zì)然可(kě)以檢驗是(shì)否滿足:&₽×®±ldquo;任何第三者無法冒充服務器(qì)”這★↕(zhè)一(yī)要(yào)求。

 

Q4: 那(nà)怎麽加密信息呢(ne)

BS: 使用(yòng)對(duì)稱加密技(jì)術(shù)

 

對(duì)稱加密可(kě)以理(lǐ)解為♠≈(wèi)對(duì)原始數(shù)據‍≈的(de)可(kě)逆變換。比如(rú)&n •bsp;Hello 可(kě)σ&π♥以變換成 Ifmmp,規則就(jiù)是(sh"δì)每個(gè)字母變成它在字母表上(shà©$ ☆ng)的(de)後一(yī)個(gè)字母,這(zhè)裡(lǐ)的(de  ₩™)秘鑰就(jiù)是(shì) 1,另一(yī)方拿(ná)到(dà∑‌₩o) Ifmmp 就(jiù)可(kě)以還(hái)原♠♦成原來(lái)的(de)信息 Hello♠★ 了(le)。

引入對(duì)稱加密後,HTTPS 的(de)握手流程就(jiù)會(¶→•huì)多(duō)了(le)兩步,用(yòng¥™")來(lái)傳遞對(duì)稱加密的(de)秘鑰:

 

  • 客戶端: 你(nǐ)好(hǎo),我需要(yào)發起一(yī)個(g↑₹★è) HTTPS 請(qǐng)求
  • 服務器(qì): 好(hǎo)的(de),你(nǐ)的(de)秘鑰是(↕ ±≈shì) 1。

 

提到(dào)了(le)對(duì)稱加密δσ,那(nà)麽自(zì)然還(hái)有(yǒu)非對(duì)₽​稱加密。它的(de)思想很(hěn)簡單,計∑←(jì)算(suàn)兩個(gè)質數(s∞↓hù)的(de)乘積很(hěn)容易,但(dàn)反過來(✘↕§lái)分(fēn)解成兩個(gè)質數(shù)的(de)乘積就(j→₩iù)很(hěn)難,要(yào)經過極為(wè<‌i)複雜(zá)的(de)運算(suàn)。非對(duì)稱加↔<密有(yǒu)兩個(gè)秘鑰,一(yī)個(gè)是(shì)公±←鑰,一(yī)個(gè)是(shì)私鑰。公鑰加密的​‌≤(de)內(nèi)容隻有(yǒu)私鑰可(kěπ$♣)以解密,私鑰加密的(de)內(nèi)容隻有(yǒu)公鑰可>ε(kě)以解密。一(yī)般我們把服務器(qì)自(zì)己留著(zhe),★₹‌不(bù)對(duì)外(wài)公布的(de)密鑰稱為(wèi)私鑰,₽£所有(yǒu)人(rén)都(dōu)可♥≈®(kě)以獲取的(de)稱為(wèi)公鑰。

 

使用(yòng)對(duì)稱加密一(yī)般要(yà®"o)比非對(duì)稱加密快(kuài)得(d↑₹e)多(duō),對(duì)服務器(qì)的(de)運算(su♠π'àn)壓力也(yě)小(xiǎo)得(de)多(dα σuō)。

 

Q5: 對(duì)稱秘鑰如(rú)何傳輸

 

服務器(qì)直接返回明(míng)文(wén)的(de)對(d✘© uì)稱加密密鑰是(shì)不(bù)是(shì)不(bù)安全。如(rú)γ ★果有(yǒu)監聽(tīng)者拿(ná)到(dào)這(zhè)個(≤ ♦gè)密鑰,不(bù)就(jiù)知(zhī)道(dào)客戶端♥≤δδ和(hé)服務器(qì)後續的(de)通(tōng)信內(nèi)容了(l¥"×e)麽?

 

BS: 利用(yòng)非對(duì)稱加密

 

是(shì)這(zhè)樣,所以不(bù)能(néng) ≈明(míng)文(wén)傳遞對(duì)稱秘鑰,而且也(yě♥₹)不(bù)能(néng)用(yòng)一(yī)個(gèπ↕)新的(de)對(duì)稱加密算(suàn)法來(lái)加密原來(láγ>i)的(de)對(duì)稱秘鑰,否則新的(de)對(du £ì)稱秘鑰同樣無法傳輸,這(zhè)就(j≥'γiù)是(shì)雞生(shēng)蛋、蛋生<π (shēng)雞的(de)悖論。

 

這(zhè)裡(lǐ)我們引入非對(duì)稱加密的(‌×de)方式,非對(duì)稱加密的(de)特性決定₩¥★←了(le)服務器(qì)用(yòng)私♠•×&鑰加密的(de)內(nèi)容并不(bù)是(shì ≠≠)真正的(de)加密,因為(wèi)公鑰所有(yǒu)人(rΩ∏•δén)都(dōu)有(yǒu),所以服務器(qì)的(de♠∑‍ )密文(wén)能(néng)被所有(yǒu)人(rén)解析。但(φ<dàn)私鑰隻掌握在服務器(qì)手上(shàngλΩΩ÷),這(zhè)就(jiù)帶來(lái)了(le)兩個(φ™∑gè)巨大(dà)的(de)優勢:

 

  1. 服務器(qì)下(xià)發的(de)內(nèi)容不(bù)可(&¥∏kě)能(néng)被僞造,因為(wèi)别人(rén)都(dōu)沒有(×✔yǒu)私鑰,所以無法加密。強行(xíng☆→♣>)加密的(de)後果是(shì)客戶端用(yòng)公鑰無法解開(kā ✔←i)。
  2. 任何人(rén)用(yòng)公鑰加密的₽→→(de)內(nèi)容都(dōu)是(s‍γhì)絕對(duì)安全的(de),因為π (wèi)私鑰隻有(yǒu)服務器(qì)有(yǒ​✘u),也(yě)就(jiù)是(shì)隻有(∑∑±yǒu)真正的(de)服務器(qì)可(kě)以看(kàn)到(d☆ ≤±ào)被加密的(de)原文(wén)。

 

所以傳輸對(duì)稱秘鑰的(de)問(wèn)題就(jiù)迎刃而解了(l'∞↓γe): 秘鑰不(bù)是(shì)由服務器(qì)下(xià)發♣φ♣¶,而是(shì)由客戶端生(shēng)成并ε®且主動告訴服務器(qì)。

所以當引入非對(duì)稱加密後,HTTPS 的(de)握手流程依≤∞<×然是(shì)兩步,不(bù)過細節略有→♥∑(yǒu)變化(huà):

 

客戶端: 你(nǐ)好(hǎo),我需要(yào)發起一(y≠€®≈ī)個(gè) HTTPS 請(qǐng)求,這(zhè)是(shì←×↓)我的(de) (用(yòng)公鑰加密後的(∏←de)) 秘鑰。

服務器(qì): 好(hǎo)的(de),我知(z"πσhī)道(dào)你(nǐ)的(de)秘鑰了(le),後續就(jiù)用‍Ω★(yòng)它傳輸。

 

Q5: 那(nà)公鑰怎麽傳輸

 

你(nǐ)好(hǎo)像還(hái)是(∏$shì)沒有(yǒu)解決雞生(shēngπ♠​₹)蛋,蛋生(shēng)雞的(de)問(wèn)題。你(nǐ)說(sh₽✔uō)客戶端發送請(qǐng)求時(shí)要(yàoΩ×♦$)用(yòng)公鑰加密對(duì)稱秘鑰,那(nà)✘∞α公鑰怎麽傳輸呢(ne)?

 

BS: 對(duì)公鑰加密就(jiù)行(xíng)α≠了(le)。。。

 

每一(yī)個(gè)使用(yòng) HTTPS 的(de)服↑‍務器(qì)都(dōu)必須去(qù)專門(mén)的(de≈↕λ₽)證書(shū)機(jī)構注冊一(yī¶₽≠®)個(gè)證書(shū),證書(shū)中存儲了(l¶γ₩e)用(yòng)權威機(jī)構私鑰加密的(de)公鑰。這<←(zhè)樣客戶端用(yòng)權威機(jī)構的(de)公鑰解密就(€γ<jiù)可(kě)以了(le)。

 

現(xiàn)在 HTTPS 協議(yì)的(de)握手階段  •∏變成了(le)四步:

 

  1. 客戶端: 你(nǐ)好(hǎo),我要(yào)發起一(yī)個(gè)β÷≈♦ HTTPS 請(qǐng)求,請(qǐng)♦©Ω®給我公鑰
  2. 服務器(qì): 好(hǎo)的(de),這(zhè)是(shì)我的(©♦de)證書(shū),裡(lǐ)面有(yǒu)加密後的(de)公δ •♣鑰
  3. 客戶端: 解密成功以後告訴服務器(qì): 這(zhè)是(shì)¶±¶ 我的(de) (用(yòng)公鑰加密後的(de)) 對(duì)稱秘鑰。
  4. 服務器(qì): 好(hǎo)的(de),我知(zhī)道(dào)你(✘★γπnǐ)的(de)秘鑰了(le),後續就(jiù)用(yòng)它傳←→↕輸。

 

Q6: 你(nǐ)在逗我麽。。。。

 

那(nà)權威機(jī)構的(de)公鑰又(yòu)怎麽傳輸?

 

BS: 存在電(diàn)腦(nǎo)裡(lǐ★¶<)

 

這(zhè)個(gè)公鑰不(bù)用(yòng)傳輸,會(huì)直接內(δφβ→nèi)置在各大(dà)操作(zuò)系統(或者浏覽器(qì))的(d>×e)出廠(chǎng)設置裡(lǐ)。之所以不(bù)把∞‍‌'每個(gè)服務器(qì)的(de)公鑰內∞φ(nèi)置在電(diàn)腦(nǎo)裡(lǐ),§ε±一(yī)方面是(shì)因為(wèi)服務器(qì)太多(duō),存不(b♥£ù)過來(lái)。另一(yī)方面操作(zuò)系統也(yě)不(bù)信✔​&任你(nǐ),憑什(shén)麽你(nǐ)說(shuō)你(nǐ)這(zhεε✘'è)個(gè)就(jiù)是(shì)百度/淘寶的(de)證書™§∞(shū)呢(ne)?

 

所以各個(gè)公司要(yào)先去(qù)權威機(jī)構認證,申請(q≠Ω&÷ǐng)證書(shū),然後操作(zuò)系統隻會(huì)存儲權威機(¥∑♦jī)構的(de)公鑰。因為(wèi)權威機(jī)構←λλ™數(shù)量有(yǒu)限,所以操作(zuò)系統廠(chǎng)商相(x↓≥±iàng)對(duì)來(lái)說(shuō)容易‍ 管理(lǐ)。如(rú)果這(zhè)個(gè)權威機(jσ÷ī)構不(bù)夠權威,XJB 發證書(→®shū),就(jiù)會(huì)取消他(t✘>ā)的(de)資格,比如(rú)可(kě)憐的(de)沃通(×←≈tōng)。。。。

 

Q7: 怎麽知(zhī)道(dào)證書(shū)有(ε↕&yǒu)沒有(yǒu)被篡改?

 

你(nǐ)說(shuō)服務器(qì)第一(y×→¶ī)次會(huì)返回證書(shū),也(yě)就(jiù)是♦≥←✘(shì)加密以後的(de)公鑰,那(nà)我怎麽知(zhī)λ←≠ε道(dào)這(zhè)個(gè)證書(shū)是(shì)可(kě)靠的(±§de)?

 

BS: 将信息 hash 值随著(zhe)信息一(yī)起傳遞

 

我們都(dōu)知(zhī)道(dào)哈希算(suàn)法的(de)特點,&≈它可(kě)以壓縮數(shù)據,如(rú)π ×果從(cóng)函數(shù)角度來(lái)看(kàn),不(bù)₽β≠γ管多(duō)複雜(zá)的(de)數(shù)據(定義&→σ&域可(kě)以非常大(dà))經過哈希算(suàn)法都(dō♦&λu)會(huì)得(de)到(dào)一(yī)個(gè)值,而且這(zhèφ♥₩≤)個(gè)值處在某個(gè)特定(遠(yuǎn)小(xiǎo)于↓↕♦定義域的(de)範圍)值域內(nèi)。₽δ≤相(xiàng)同數(shù)據的(de)哈希結果一λ£ ←(yī)定相(xiàng)同,不(bù)相(xiàng)同數(sh‍♠‌§ù)據的(de)哈希結果一(yī)般不(bù)同,不(bù)≈&過也(yě)有(yǒu)小(xiǎo)概率會(huì)重複∞<₩,這(zhè)叫哈希沖突。

 

為(wèi)了(le)确保原始證書(shū)沒©σ"±有(yǒu)被篡改,我們可(kě)以在傳遞證書(shū)的(de)同時(s "≈hí)傳遞證書(shū)的(de)哈希值。由于第三 ↓←$者無法解析數(shù)據,隻能(néng)α÷ XJB 改,那(nà)麽修改後的(de)數(s©¥ hù)據在解密後,就(jiù)不(bù)可(kě)能(néng)通(tōng)™✔γ過哈希。

 

比如(rú)說(shuō)公鑰就(jiù)是(shì)之前←©λ的(de)例子(zǐ) Hello,我們假設哈希算(s₩₽uàn)法是(shì)獲取字符串的(de)>"最後一(yī)個(gè)字符,那(nà)麽 Hello&nφδ ♠bsp;的(de)哈希值就(jiù)是(shì)&★♣ &nbsp;o,所以加密字符串是(shì) Ifm×€₩€mpp。雖然公鑰已知(zhī),每個(gè)人(ré₩‍∏n)都(dōu)可(kě)以解密,解密完≥÷φ也(yě)可(kě)以篡改,但(dàn)是(shì)™₽因為(wèi)沒有(yǒu)私鑰, 所以× 無法正确的(de)加密。所以它再返回給客戶端的(de)數(shù)據↓λσ是(shì)無效數(shù)據,用(yòng↔¥')公鑰解析後會(huì)得(de)到(dào)亂碼。σ"&ε即使攻擊者通(tōng)過多(duō)次嘗試碰巧能(néng)夠解析,↓≠ 也(yě)無法通(tōng)過哈希校(xiào)驗。

 

Q8: 這(zhè)樣可(kě)以防止第三方冒充服務器×φσ(qì)麽

BS: 也(yě)許可(kě)以

 

首先真正的(de)服務器(qì)下(xià)發的(&↕≥de)內(nèi)容,無法被别人(rén)篡改。他(tā)們有α☆(yǒu)權威機(jī)構的(de)公鑰,所以可(kě)以解密,但 β&(dàn)是(shì)因為(wèi)沒有(yǒu¥↔)私鑰,所以解密以後的(de)信息無法加密。沒有(yǒ♥♦☆u)加密或者錯(cuò)誤加密的(de)信息€£↓β被客戶端用(yòng)公鑰解密以後,必然無法通(tōng)過哈希校(xi®§€ào)驗。

 

但(dàn)是(shì),如(rú)果你(nǐ)一(yī)開(kāi)始請(q ©ǐng)求的(de)就(jiù)不(bù)是(shì)‍®σ≈真的(de)服務器(qì),而是(shì)一(yī)個(gè)攻擊者, π≠此時(shí)的(de)他(tā)完全有(yǒ≥÷‍u)機(jī)會(huì)進行(xíng)中間(jiān)人(rénγ  ↑)攻擊。我們知(zhī)道(dào)第一(yī)次握手的(de)時(shí)候¶$服務器(qì)會(huì)下(xià)發用±λ"(yòng)于證明(míng)自(zì)己身(sh‍​ ēn)份的(de)證書(shū),這(zhè)個(gè)證書(shū$×∑★)會(huì)用(yòng)預設在設備上(shàng)的££≤→(de)公鑰來(lái)解密。所以要(yào)麽是(shì)經過認證的(dδ®e)證書(shū)用(yòng)權威機(jī)構的(★γde)私鑰加密,再用(yòng)權威機(jī)構解密,要(yào)麽是(♠≈shì)用(yòng)非權威機(jī)構的(de)私鑰加<₽γ密,然後找不(bù)到(dào)公鑰解密。

 

所以如(rú)果不(bù)小(xiǎo)心安裝過非權​∏威機(jī)構的(de)根證書(shū),比如(rú)黑(hēi)客提供的‌↑‌(de)惡意證書(shū),這(zhè)時(sβπhí)候設備上(shàng)就(jiù)多(duō)了(le)一(yī≤¶>)個(gè)預設的(de)公鑰,那(nà)麽用(yòng)惡意私鑰加密的(d₽₹≤₩e)證書(shū)就(jiù)能(néng)被正常解析出來(σ< ✘lái)。所以千萬不(bù)要(yào)¶↑随便裝根證書(shū),這(zhè)等于是(sh←αΩì)為(wèi)那(nà)些(xiē)惡意證書(shū)留了(₩←le)一(yī)扇門(mén)。

 

當然,凡是(shì)都(dōu)有(yǒu)兩面性。我們知β♥(zhī)道(dào) Charles 可(kě)以調試 HTTPS 通£π‍$(tōng)信,它的(de)原理(lǐ)就(jiù)是(shì)需要(yào✔'>γ)用(yòng)戶安裝 Charles 的(de)₽¶Ω根證書(shū),然後我們的(de)請(qǐng)求會(huì∑®)被代理(lǐ)到(dào) Charles 服務器(qì),它下(xià) £✘發的(de) Charles 證書(sh♥↑<αū)才能(néng)被正确解析。另一(yī£<)方面,Charles 會(huì)作(zuò)為(wèi)客戶端✔€‌,從(cóng)真正的(de)服務器(qì)哪裡(lǐ)拿(n↑σσδá)到(dào)正确的(de) https 證書(shū)并用(yòng)于後₹★續通(tōng)信。幸好(hǎo) Charles 不(bù)是(shì)流§Ω☆₽氓軟件(jiàn),或者它的(de)私鑰一(y₩‍§ī)旦洩露,對(duì)用(yòng)戶都(dōu)會(huì)造成很"€(hěn)大(dà)的(de)影(yǐng)響。

 

我可(kě)以舉一(yī)個(gè)例子(≈≠↕zǐ),證書(shū)有(yǒu)多(duō)個(gè)種類,最貴的(d≤ e)叫 EV (Extended Validation),它需要(yào∞™")公司營業(yè)執照(zhào)等多(duō)個(gè)文(γ©βwén)件(jiàn)才能(néng)申請(qǐng)人(rén)工(gōng±→)審核,好(hǎo)處也(yě)很(hěn)明(míng)≠>§π顯,可(kě)以在浏覽器(qì)地(dì)址欄左側準确顯示≈•≥公司名稱,比如(rú) Bitbucket 的(de)官網:

 

 

 

代理(lǐ)模式下(xià)無法顯示

Q9: HTTPS 握手會(huì)影(yǐn€γ∏πg)響性能(néng)麽

TCP 有(yǒu)三次握手,再加上(shàng)∑  HTTPS 的(de)四次握手,會(huì)不(bù)會(←↕"↑huì)影(yǐng)響性能(néng)?

BS: 影(yǐng)響肯定有(yǒu) λ™,但(dàn)是(shì)可(kě)以接受

首先,HTTPS 肯定會(huì)更慢(màn)一(yī)點,時(s✔£hí)間(jiān)主要(yào)花(huā)費(fèi)在兩λα組 SSL 之間(jiān)的(de)耗時(shí)∞'φα和(hé)證書(shū)的(de)讀(d" π∏ú)取驗證上(shàng),對(duì)稱算(suàn)法的(←✘≠÷de)加解密時(shí)間(jiān)幾乎可(kěΩ✘)以忽略不(bù)計(jì)。

而且如(rú)果不(bù)是(shì)首次握手,後續的→<€☆(de)請(qǐng)求并不(bù)需要(yào)完整的(d'λ≈ e)握手過程。客戶端可(kě)以把上(shà→ ng)次的(de)加密情況直接發送給服務器(qì)從(cóng)而快(kuà¥÷♥♥i)速恢複,具體(tǐ)細節可(kě)以參考 圖解γ↓SSL/TLS協議(yì)。

除此以外(wài),SSL 握手的(de)時(shí)間(jiān)并不(✘δbù)是(shì)隻能(néng)用(yòng)來(lái)傳遞加密信息π¶€,還(hái)可(kě)以承擔起客戶端和(hé)αε∞∞服務器(qì)溝通(tōng) HTTP2 兼容情況的(de)任務。©λ≈σ因此從(cóng) HTTPS 切換到(dào) HTTP2.0 不(bù€‍)會(huì)有(yǒu)任何性能(néng)上(shàng"₽ )的(de)開(kāi)銷,反倒是(shì)得(de)益于↕☆ HTTP2.0 的(de)多(duō)路(lù)複用(yòng <↓)等技(jì)術(shù),後續可(kě)以節約大(dà)量時(shí✘‌)間(jiān)。

如(rú)果把 HTTPS2.0 當做(zuò)目∏☆标,那(nà)麽 HTTPS 的(de)性能(néng)γ<損耗就(jiù)更小(xiǎo)了(le),遠(yuǎn)遠(yuǎn)比不•&(bù)上(shàng)它帶來(lái)的(de)安全性提升。

結語

 

相(xiàng)信以上(shàng)九個(gè)問(γδ®βwèn)題足夠幫助新人(rén)了(le)解 HTTPφ★S 了(le),但(dàn)這(zhè)隻是(shì)基本概念,關于 HTTPε×&S 的(de)使用(yòng)(比如(rú) ∏​' iOS 上(shàng)的(de)一(yī)些(xiē)具體(tǐ)問(wè→•≠n)題)還(hái)需要(yào)不(bù)斷嘗試和(hé≥δ↑)研究。

 

本文(wén)來(lái)自(zì)于簡書(shū)&nbsλ∑p;

鏈接:www.jianshu.com/p/07✔<2a657337ae