openssl 中是否需要針對 SSL 憑證進行 CN/主機名稱驗證?

openssl 中是否需要針對 SSL 憑證進行 CN/主機名稱驗證?

在存在「信任證書」和其他屬性的情況下......這有多重要?

OpenSSL 現在是否實作了?

答案1

在大多數使用SSL 的協定/應用程式中,客戶端需要檢查以下兩個內容:(1) 伺服器提供有效的證書,這意味著該證書由受信任的CA 頒發且未過期、撤銷或篡改,並且(2) 此憑證適用於您想要的伺服器,不是您的連線被錯誤或故意攻擊路由到的其他人。 (在極少數情況下,您不需要伺服器驗證,僅需要機密性,但是您最好使用明確不進行身份驗證的「anon」或「aNULL」密碼套件。)

迄今為止,OpenSSL 執行 (1) 但不執行 (2),並且通常僅支援其信任庫中的 CA 根憑證;一個 CA 根可能「負責」數千或數百萬個伺服器證書,例如,如果 Verisign 向兩者頒發了證書bigbank.comlocaldiner.com這並不意味著我想將我的 bigbank 帳戶交給 localdiner。因此,應用程式需要執行 (2),無論是在 verify_callback 中,還是在握手完成之後但在發送(敏感)資料之前。下一個主要版本 1.0.2 計劃包含對憑證鏈驗證的增強,並且我相信至少在某些情況下還會進行名稱驗證。請注意,對於使用 RFC 2818 的 HTTPS 或使用 RFC 6125 的其他基於 TLS 的協議,您需要檢查主題中的 CommonName 和SubjectAlternativeNames 擴充(如果存在)。

我不知道為什麼選擇 OpenSSL(以及在此之前的 SSLeay)不這樣做已經。有人可能會說,一些不尋常的 SSL/TLS 應用程式需要標準 CN/SAN 以外的東西,但 OpenSSL 在其他領域可以處理常見情況,並為罕見情況提供回調或選項。我認為這可能是工作太多而人員不足(直到最近)。

相關內容