- 适用于 JDK 24 的 GraalVM(最新)
- 适用于 JDK 25 的 GraalVM(早期访问)
- 适用于 JDK 21 的 GraalVM
- 适用于 JDK 17 的 GraalVM
- 存档
- 开发构建
Native Image 中的证书管理
Native Image 提供了多种方式来指定用于定义默认信任库(TrustStore)的证书文件。在以下章节中,我们将介绍可用的构建时和运行时选项。注意: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
进行检查。