題:
什麼是證書固定?
Avery Chan
2013-01-31 05:27:08 UTC
view on stackexchange narkive permalink

我對SSL和證書的用途很熟悉。最近,我看到了一些有關證書固定的討論,但沒有定義。 DDG搜索沒有發現任何有用的信息。什麼是證書固定?

Wikipedia中對[證書固定](https://en.wikipedia.org/wiki/Certificate_pinning#Certificate_pinning)有一個相當簡潔的描述。有關更詳細的說明,請參閱IETF網絡安全(websec)工作組的[HTTP的公鑰固定擴展](http://tools.ietf.org/html/draft-ietf-websec-key-pinning)規範(當前Internet草案,但可能很快會成為RFC)。
僅供參考:此問題鏈接到http://www.theregister.co.uk/2015/03/24/google_ssl_cnnic/
我是基於HTTP的公鑰固定RFC的合著者。這裡的答案在某些方面不准確(例如,PKP與STS是分開的)。查看我關於該主題的博客文章https://noncombatant.org/2015/05/01/about-http-public-key-pinning/,或閱讀RFC本身https://tools.ietf.org/html / rfc7469。
六 答案:
tylerl
2013-01-31 07:23:32 UTC
view on stackexchange narkive permalink

通常,通過檢查簽名層次來驗證證書。 MyCert IntermediateCert 簽名,而IntermediateCert 由 RootCert 簽名,並且RootCert列在計算機的“信任證書”存儲中。

證書固定是您忽略整個事情的地方,並說僅信任此證書,或者僅信任此證書籤名的證書,而忽略了所有其他根CA否則可能成為信任錨。它通常也稱為“密鑰固定”,因為實際上是保存了公共密鑰哈希。

但是實際上,“密鑰固定”導致的問題多於解決的問題。站點所有者經常對其進行錯誤配置,並且如果站點受到破壞,攻擊者可能會惡意地鎖定站點所有者無法控制的證書。 Key Pinning在2017年已棄用,並於2019年11月從Chrome和Firefox中完全刪除。IE和Safari從未支持它。

建議的替代方法是使用 Expect -CT標頭,告訴瀏覽器要求證書顯示在“證書透明性”日誌中。

好的答案,但這還取決於瀏覽器。 Google的Chrome瀏覽器將Google網站的證書固定,因此,在您的示例中,Chrome瀏覽器將僅信任特定的google.com證​​書(已知為正確的證書)(或由Google Internet Authority簽名的證書)。
@KeithS的原理與瀏覽器無關。 Google使用稍微不同的機制(公鑰哈希而不是證書哈希)來鎖定它知道的證書,但是它仍然足夠接近,因此稱其為“鎖定”仍然是正確的。
那怎麼辦呢?證書固定,我的意思是
@user93353證書詳細信息存儲在客戶端,並與通過網絡發送的證書進行比較。
如何完成(或在提案草案標準化後如何完成)的完整詳細信息: websec-key-pinninghttp://tack.io/index.htmlhttps://www.imperialviolet.org/2011/05/04/pinning.html
“ **香港郵政局**”應該讓你覺得
關於證書固定,我仍然不了解-為什麼我仍然可以通過公司MITM訪問Google應用程序?我知道我的PC上已經安裝了我公司的根證書,但是當Google的站點由與固定證書之一不匹配的證書(我公司的證書)簽名時,Google不會拋出錯誤嗎?也許我誤會了固定的工作原理。
@JoshvonSchaumburg當在本地安裝有問題的證書(未鏈接到根存儲證書)時,Chrome不會進行固定檢查。這是故意的。這個想法是,如果您是本地計算機的所有者,那麼您的決定應該是最終決定,Chrome不應嘗試規避您的操作。我認為,過去曾有一些關於以視覺方式表明該證書是本地信任而不是全球信任的消息,目前為止還沒有實現。
您的帖子混淆了HPTS的HSTS。HSTS僅確保使用HTTPS。證書固定是[HPKP](https://en.wikipedia.org/wiki/HTTP_Public_Key_Pinning)的工作。
-1
@tylerl:嗯...不?HPKP使用Public-Key-Pins標頭,而HSTS使用Strict-Transport-Security標頭。它們是完全無關的。
基於[您的評論](https://security.stackexchange.com/questions/29988/what-is-certificate-pinning/84425#comment146160_29990)的@tylerl的意思是,如果iOS應用實現了證書固定,即使是這種情況,其網絡請求將顯示給諸如Charles Proxy之類的東西,因為“如果您是本地計算機的所有者,那麼您的決定應該是最終的”。如果是這樣,那麼API密鑰是否不會輕易從網絡調用中被竊取?
我的帖子引用了HSTS標頭而不是HPKP,因為當時還沒有定義HPKP標頭,並且Chrome重載了HSTS標頭以固定鍵。他們今天不是那樣做的;實際上,由於該功能已被刪除,因此今天沒有人使用密鑰固定。
fuero
2013-01-31 06:20:53 UTC
view on stackexchange narkive permalink

這是模棱兩可的,但是它指的是SSL證書鏈驗證中的問題的解決方案。本質上,對SSL的信任可以歸結為根證書,即係統信任的證書是真實的。那些隨操作系統或瀏覽器一起提供。如果其中之一遭到破壞,則此簽名和可傳遞簽名的證書的所有證書都將被視為受到破壞。

  • TACK或公共密鑰固定擴展(顯然是被chrome稱為cert固定)允許服務器的管理員將證書頒發機構(CA)的公鑰簽名“固定”到證書,該證書由客戶端驗證(通過SSL擴展提供)。如果在檢索證書鏈時CA證書的密鑰不同,則可能會損害CA證書。

  • 證書固定也可以參考在您的信任庫中導入主機的證書,而不是信任CA證書。這樣可以減輕CA證書被洩露的風險,但是如果證書手動失效,則會強制您更新證書。

Tom Leek
2013-01-31 20:34:18 UTC
view on stackexchange narkive permalink

SSL服務器證書來自 X.509世界。客戶端通過驗證證書頒發機構中的許多加密簽名來驗證服務器證書的有效性。該方案的優點在於它是無狀態的:給定的服務器可以每五分鐘更改一次證書,並且仍然可以與客戶端一起使用。

有人認為,儘管支持快速旋轉的證書非常棒,但卻沒有用,因為實際上,給定的服務器每年每 更改一次證書;的確,儘早進行證書轉換錶明某些漁業活動正在進行。 證書固定是服務器聲明這種情況不應在正常情況下發生的一種方法,並且如果發生意外的證書切換,客戶端應該引起隱喻的注意。這是協議擴展,建議但尚未得到廣泛支持。實際上,似乎有一些相對相似的競爭性提議。

另請參閱融合,這是又一個協議擴展,可以看作是“受信任的第三方的證書固定”。融合和證書固定提案都圍繞著相同的核心思想,即在客戶端(或至少在某個地方)具有一些 state ,並在證書更改得太頻繁或過早時觸發安全警告。這些提議中的任何一項是否會被廣泛接受(即IE,Firefox,Chrome和Safari將以兼容的方式實現,大多數SSL服務器系統管理員將使用)。 / p>

我聲稱融合(或透視圖)不是協議擴展,而是一條側面通道,用於驗證從全球不同位置查看主機是否正在使用同一證書,並且這種情況已經存在了一段時間。與其他措施的核心區別在於,與其他證書固定方法不同,主機不能影響此驗證。
我知道這不是選擇的答案,但是對我來說,這是我能理解的解釋。謝謝湯姆。
借用Sizons,Tom的表達簡潔明了。這是[[MDN文檔,用於實現固定功能,這似乎是當今的標準(HPKP)]](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Public_Key_Pinning)。
Aniket Thakur
2015-03-23 23:02:26 UTC
view on stackexchange narkive permalink

通常,HTTPS連接中發生的情況是,客戶端從其通過https與之通信的SSL兼容服務器請求SSL證書。服務器將從其密鑰庫中提供證書。客戶端收到此證書後,它將根據

  • 主機名是否與所請求的主機名相同
  • 具有可驗證的信任鏈回到受信任的(根)證書來驗證其憑據。客戶端信任存儲]

現在,如果代理已建立連接,並且您可以使設備信任您的(惡意)根CA證書,則可以攔截安全連接。這本質上是中間人攻擊。現在,這裡發生了SSL固定,這可能會增加中間人攻擊的額外安全層-

App會將已知的服務器證書與自身捆綁在一起。當應用嘗試與服務器建立安全連接時,它會使用捆綁的證書來驗證服務器收到的證書。因此,即使OS根據(可能是惡意的)根CA驗證了接收到的證書鏈,該應用程序也會拒絕顯示網絡錯誤的連接。

注意:我已經嘗試從SSL固定的角度回答此問題。在Android Apps中。在此類應用程序中,很容易實現SSL固定,因為該應用程序已經知道它將要連接的服務器(主機名)。但是,可能難以在瀏覽器中實現相同的功能。我認為Chrome瀏覽器已經實現了此功能。

我還編寫了一個示例代碼,演示了Android中的證書固定。您可以在 github上找到它。您還可以在 playstore上找到同一應用。

更多信息:

FWIW證書固定存在一個問題:1.它使調試變得困難。因為您無法將其連接到Charles-除非您在調試期間將其禁用2.您的證書最終將失效。
Lucas
2016-09-22 01:19:49 UTC
view on stackexchange narkive permalink

證書固定可繞過標准證書頒發機構鏈,以減輕向犯罪分子簽發有效證書的風險。

尋求新解決方案的動機...

SSL / TLS證書由其他證書籤名。當在此簽名鏈的某個位置找到可信實體時,瀏覽器通常會認為證書有效。受信任實體的簽名來自操作系統和瀏覽器的基本安裝。它是大約100個實體的嵌入式列表。

如果其中一個受信任的證書頒發機構遭到破壞,或者證書頒發機構是欺詐行為的受害者,則他們可以向犯罪分子頒發有效證書。犯罪分子會以您的名義擁有完善的SSL / TLS證書。犯罪分子將能夠進行成功且可信的“中間人”攻擊。用戶將在您的網站上看到有效的證書信息。

而且,說服用戶安裝新的可信證書頒發機構也不難。例如,在巴西,主流瀏覽器無法識別官方證書頒發機構,因此每個人都必須安裝其他證書頒發機構。瀏覽器對此非常擅長:僅單擊鏈接並回答是。為了達到這種可用性,我相信這是全球範圍內的常見任務。

不能完全信任證書頒發機構。獲得證書的過程絕不是安全的。我已經在一家公司買了一個,只花了一點錢。當然總比沒有好。但是需要改進。

固定是什麼?

在首次訪問網站secure.example.com時,網站向客戶端瀏覽器發送了一條隱藏消息,該消息大致翻譯為:

”在接下來的N天內,secure.example.com網站將使用證書CECECECE。在此期間,即使證書頒發機構聲稱該證書對本網站有效,也不接受其他證書。在 http://100.200.100.200/callbacks/warn_pinning.php通知我。

固定解決了問題嗎?

這不能解決證書頒發機構證書籤名過程的弱點。 但要最小化犯罪分子與中間襲擊者相處的機會之窗。只有讓用戶首次訪問該網站,該攻擊才會起作用。

它類似於SSH安全性。首次訪問時,將保存服務器密鑰的簽名。如果將來訪問該標識不匹配,則係統將生成警告。該警告非常重要,因為只有在您進行真正的更改時才會發生。

對於大公司而言,最好的辦法是通過客戶投訴通知某人已以犯罪者的名義發布了真實的TLS / SSL證書。據我了解,固定機制是由Google提出的。

應用程序級固定

固定也可以在瀏覽器外部進行,方法是在應用中編譯真實的證書指紋。

我猜想在DNS中毒和類似情況下,攻擊者更改了域名的IP,證書固定也會有所幫助(假設您以前訪問過該站點)。
好問題。在加密連接上會。但是我不知道固定站點是否會阻止未加密的連接正常工作。如果不是這樣,攻擊者仍然可以使用未加密的連接進行可信的攻擊。如果不是僅僅是時間問題。不允許為固定的站點進行未加密的連接完全沒有意義。
Joseph
2013-04-28 16:56:37 UTC
view on stackexchange narkive permalink

我認為,對Web用戶進行MITM sslstrip攻擊時,保留瀏覽器客戶端的SSL證書只是HSTS的實現

證書固定是不同的。目前,HSTS沒有提供任何固定到單個證書的方法。取而代之的是,HSTS是一個布爾值,它使網站可以說“請只使用SSL”(但不能讓網站限制於單個證書)。證書固定是一種擴展/不同的機制。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...