Native Image 中的憑證管理

Native Image 提供多種方式來指定用於定義預設信任儲存區的憑證檔案。在以下章節中,我們將說明可用的建置時和執行時選項。注意:native-image 的預設行為是從建置時主機環境擷取並使用預設信任儲存區。

建置時選項 #

在映像檔建置過程中,native-image 建置器會擷取主機環境的預設信任儲存區,並將其嵌入至原生執行檔中。預設情況下,此信任儲存區是從 JDK 中提供的根憑證檔案建立,但可以透過設定建置時系統屬性 javax.net.ssl.trustStore 來變更為使用不同的憑證檔案 (請參閱 屬性 以了解如何操作)。

由於建置時憑證檔案的內容會嵌入至原生執行檔中,因此檔案本身不需要存在於目標環境中。

執行時選項 #

也可以透過設定 javax.net.ssl.trustStore\* 系統屬性,在執行時動態變更憑證檔案。

如果在映像檔執行期間設定了以下任何系統屬性,則 native-image 也會要求設定 javax.net.ssl.trustStore,並使其指向可存取的憑證檔案

  • javax.net.ssl.trustStore
  • javax.net.ssl.trustStoreType
  • javax.net.ssl.trustStoreProvider
  • javax.net.ssl.trustStorePassword

如果設定了這些屬性中的任何一個,且 javax.net.ssl.trustStore 未指向可存取的檔案,則會擲回 UnsupportedFeatureError

請注意,此行為與 OpenJDK 不同。當 javax.net.ssl.trustStore 系統屬性未設定或無效時,OpenJDK 會回退使用 JDK 中隨附的憑證檔案。但是,此類檔案不會與映像檔執行檔一起存在,因此無法用作回退。

在執行期間,也可以動態變更 javax.net.ssl.trustStore\* 屬性,並據此更新預設信任儲存區。

最後,每當未設定上述所有 javax.net.ssl.trustStore\* 系統屬性時,預設信任儲存區將是建置時擷取的信任儲存區,如前一節所述。

不受信任的憑證 #

在映像檔建置過程中,會從檔案 <java.home>/lib/security/blacklisted.certs 載入不受信任的憑證清單。此檔案用於在建置時和執行時驗證憑證。換句話說,當透過設定 javax.net.ssl.trustStore\* 系統屬性在執行時指定新的憑證檔案時,仍會根據映像檔建置時載入的 <java.home>/lib/security/blacklisted.certs 來檢查新憑證。

延伸閱讀 #

與我們聯繫