Ssl

如何使其在本地網路中工作證書固定(HPKP)和自簽名證書?

  • October 4, 2017

我需要在本地網路中使用 SSL,並且我想避免瀏覽器無效證書錯誤。

我的想法是生成自簽名證書,然後使用證書固定(HPKP)以便告訴瀏覽器只有這個證書可以信任?

我目前正在探索與這個想法相關的所有選項。我已經使用具有值的自簽名證書和 HPKP 標頭(Public-Key-Pins)進行了測試,例如:

"pin-sha256="somedataencodedbase64=";pin-max-age=10;includeSubDomains"

瀏覽器不接受它作為安全。我仍然需要完成這個測試(使用不同的自簽名證書,我需要確保正確計算 SPKI ..​​.

現在的問題是:

  • 為給定的本地主機名(例如 mylocalserver)頒發並固定在伺服器響應中的自簽名證書是否有效?這甚至會起作用嗎?
  • 證書固定是否適用於本地主機名(這意味著它僅適用於域名)?
  • 固定證書是否必須首先由 CA 有效或推動(這意味著自簽名證書不能固定 - 除非它們被添加到客戶端的信任庫中)?
  • 在本地擁有有效 SSL 的最簡單的另一種方法是什麼,所以我不需要配置客戶端(客戶端信任庫)?
  • 我們可以將證書固定視為可信 CA 的替代品嗎?我在某處讀到它只是另外所以這意味著證書鏈首先需要有效,然後你可以固定它嗎?
  • 我也越來越想這個想法是否可行。因為那時我們會看到更多使用這種技術。每個人都會生成自簽名證書並將其固定…並在 CA 受信任的證書上節省幾美元…或者我對整個概念的錯誤或正確之處是什麼?

HPKP 不會取代正常的驗證。相反,它是正常驗證的補充。因此,如果由於證書是自簽名證書而導致正常驗證失敗,HPKP 將無濟於事。

為給定的本地主機名(例如 mylocalserver)頒發並固定在伺服器響應中的自簽名證書是否有效?這甚至會起作用嗎?

是的,HPKP 只是宣傳給定 x.509 證書的簽名。瀏覽器(或任何網路客戶端)只是在規定的時間段內記憶體它,然後在進一步訪問期間驗證此簽名。

證書固定是否適用於本地主機名(這意味著它僅適用於域名)?

本地主機名是主機名,與其他主機名一樣。即使它很短。即使它有一個本地 TLD。問題是 - 您的客戶端如何解決它以及它在Host:HTTP 請求的標頭中請求什麼。如果它將主機foobar解析為正確的 IP,然後Host:在 HTTP 請求中提出此問題,並且自簽名證書將其 CN 設置為foobar,則整個方案開始工作。

固定證書是否必須首先由 CA 有效或推動(這意味著自簽名證書不能固定 - 除非它們被添加到客戶端的信任庫中)?

不,他們沒有。但是,不知何故,您的 Web 客戶端應該有一種信任伺服器證書的方法。要麼將其放入受信任的伺服器證書列表中,要麼創建例外(這實際上與以前相同),要麼創建本地 CA 並使用本地 CA 證書籤署伺服器證書。自簽名伺服器證書只是一種跳過本地 CA 創建的方法。順便說一句,所有官方CA 都使用自簽名證書作為其公鑰基礎設施的根點。這是創建 CA 的合法方式。官方CA 只是將證書添加到最知名軟體(如作業系統、瀏覽器等)的信任庫中的CA。協商添加需要花錢,這就是為什麼它們中的大多數不是免費的。

在本地擁有有效 SSL 的最簡單的另一種方法是什麼,所以我不需要配置客戶端(客戶端信任庫)?

為您擁有的每項服務獲取自簽名證書。如果您只有很少的此類服務,則處理自簽名證書,如果有幾十個,則創建本地 CA。還有一種合法的免費方式來獲得公開接受的 X.509 證書——只需使用LetsEncrypt證書頒發機構——它是免費的。但是,它們不提供萬用字元證書 - 帶有 的證書*,如果您有大量服務,這可能是個問題。

我們可以將證書固定視為可信 CA 的替代品嗎?我在某處讀到它只是另外所以這意味著證書鏈首先需要有效,然後你可以固定它嗎?

沒有。當有人冒充目標 CA 時,證書固定是針對*中間人攻擊的對策。*為此,“某人”必須已經將他的根 CA 證書放入您的信任庫,但這是另一個問題。

我也越來越想這個想法是否可行。因為那時我們會看到更多使用這種技術。每個人都會生成自簽名證書並將其固定…並在 CA 受信任的證書上節省幾美元…或者我對整個概念的錯誤或正確之處是什麼?

你絕對是。

引用自:https://serverfault.com/questions/876798