首頁 >Java >java教程 >為什麼升級到 Java 1.7 後我會收到「unrecognized_name」SSL 握手警報?

為什麼升級到 Java 1.7 後我會收到「unrecognized_name」SSL 握手警報?

DDD
DDD原創
2024-12-07 07:12:10760瀏覽

Why Am I Getting an

SSL 握手警報:升級到Java 1.7.0 後出現無法辨識的名稱問題

從Java 1.6 升級到1.7 後,用戶可能會遇到建立SSL 時出現SSLHandshake警報,並顯示錯誤訊息「unrecognized_name」連接到網頁伺服器。此錯誤主要是由於 Java 7 引入了伺服器名稱指示 (SNI) 支持,該支援預設為啟用。

要解決此問題,有多個選項可用:

  • 停用 SNI:

要全域停用SNI,請使用以下命令列參數可以在運行應用程式時使用:

-Djsse.enableSNIExtension=false

或者,可以在執行任何SSL 操作之前以程式設計方式設定該屬性:

System.setProperty("jsse.enableSNIExtension", "false");

但是,停用SNI 可能會對應用程式產生影響需要其功能。

  • 處理無法識別的名稱警報:

另一種方法涉及更優雅地處理「unrecognized_name」警報。可以採取以下步驟:

// Create an SSLSocket with the desired hostname
SSLSocket sslsock = ...

// Attempt handshake
try {
    // This will block until the attempt succeeds or fails.
    sslsock.startHandshake();
} catch (SSLException e) {
    // Handle the exception here. If it contains the "unrecognized_name" message, disable SNI and retry.
}

// Disable SNI and retry handshake without hostname
if (e.getMessage().contains("unrecognized_name")) {
    sslsock = ... // Create an SSLSocket without specifying a hostname
    sslsock.startHandshake();
}
  • 允許不受信任的憑證:

提供的程式碼嘗試使用不受信任的伺服器連線證書。為了緩解這種情況,請考慮實施自訂信任管理或使用內建信任管理器:

// Custom trust management (for untrusted certificates)
TrustManager[] trustAllCerts = ...

// Built-in trust manager
TrustManager[] trustManagers = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()).getTrustManagers();

以上是為什麼升級到 Java 1.7 後我會收到「unrecognized_name」SSL 握手警報?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn