透過HTTPS存取使用者指定主機的應用程式是一個常見的需求,但在實際應用中可能會遇到一些困惑。對於這個問題,php小編香蕉認為應該嘗試透過尋找FQDN來提供幫助。 FQDN(Fully Qualified Domain Name)是一個完全限定的域名,包含主機名稱和域名。透過尋找FQDN,可以確保準確地定位到使用者指定的主機,從而提供準確的幫助和服務。因此,在進行HTTPS訪問時,尋找FQDN是一個有益的策略。
我正在使用一個 golang 應用程序,該應用程式透過另一台主機上的 HTTPS 與伺服器進行通訊。具體來說,如果上下文很重要:從同一 Google Cloud 專案中的 GCE 實例與 Dataproc 叢集進行通訊(無需特殊的網域設定)。
伺服器產生一個自簽名證書,我已在客戶端手動安裝該證書。
伺服器和用戶端都是我的 Google 雲端專案上的 GCE 實例(它們的 FQDN 是 581ce0c2a03eb2244e4d3a83f2c5e59d.c.ebfcb145e568f70e9a690c02a46a321e.internal
)
如果我嘗試使用 golang 的 http.Client 從客戶端連接到伺服器,我會收到以下錯誤:
failed to verify certificate: x509: certificate is valid for *.c.<project_id>.internal, not <server_hostname>
但是,如果我將其 FQDN 傳遞給它(4c7198d8b6b4fb195532e2caff10f39a.c.ebfcb145e568f70e9a690c02a46a321e.internal
),則它可以開箱即用。
僅供參考,此行為與我執行 cURL 時看到的一致:
curl: (60) SSL: no alternative certificate subject name matches target host name '<server_hostname>'
所以我的問題是:
*.c.ebfcb145e568f70e9a690c02a46a321e.internal
的一部分,並且開箱即用,不是嗎?或者它是否總是要求使用傳入的字串來實際匹配通配符字串(這意味著它不進行查找,並且僅在您傳入 fqdn 時才有效)? 注意:我不想跳過驗證 - 我只是想更好地了解正在發生的事情,並知道這裡的最佳實踐是什麼。
謝謝!
4c7198d8b6b4fb195532e2caff10f39a
和4c7198d8b6b4fb195532e2caff10f39a.c.ebfcb145e568f70e9a690c02a46a321e.internal
解析為相同的內容,證書僅包含第二個(或與其匹配的通配符) 。由於這些是自行產生的,因此您可以在其中添加短名稱作為 SAN(主題備用名稱)。
OpenSSL 的附加標誌:-addext "subjectAltName = DNS:localhost,DNS:<server_hostname>"
公共 CA 不太可能為您提供具有不可公開解析的 SAN 的憑證。 (有些可能,我沒試過)
作為範例,您不希望從 google.com.someevildomain.org
提供或信任 google.com
,因此這是一項安全功能。
以上是透過 HTTPS 存取使用者指定主機的應用程式是否應該嘗試透過尋找其 FQDN 來提供協助?的詳細內容。更多資訊請關注PHP中文網其他相關文章!