为 SpringBoot 应用程序指定密钥库时,javax.net.ssl.keyStore 和 server.ssl.key-store 属性有什么区别

What is the difference between javax.net.ssl.keyStore and server.ssl.key-store properties when specifying keystore for a SpringBoot app

  1. 我可以使用这些属性之一指定密钥库吗 - Java-特定的 javax.net.ssl.keyStore 或 spring 引导特定的 server.ssl.key-store。有什么不同吗?我想使用密钥库来使用 https 为我的应用程序提供服务,以及使用一些 REST 服务进行相互客户端身份验证

  2. 如果密钥库未指定为 属性 或 jvm 参数,而是在启动时使用自定义代码读取,是否可以使用 https 为 SpringBoot 应用程序提供服务?或者如果必须使用 https 提供应用程序,密钥库规范是否必须在此之前?

这两个属性具有互补作用:

  • javax.net.ssl.keyStore系统 属性 由 Java 安全提供程序用来配置默认值 SSLContext.大多数 SSL 客户端 使用默认 SSLContext.

    您不需要将此 属性 作为 -D 参数传递给 JVM,您可以在 早期 阶段以编程方式设置它你的应用程序启动,但我建议不要这样做:因为你的应用程序可能不是 JVM 中唯一的应用程序(例如你的 运行 它作为 WAR 存档),你将影响其他应用程序的行为。请改用非默认 SSLContext

  • server.ssl.keyStoreSpring 属性 配置 server 嵌入式 servlet 容器的套接字。它可以来自 many different sources.

    虽然理论上 servlet 容器可以使用默认值 SSLContext 并从默认值 KeyManager 检索其证书(它从通过 javax.net.ssl.keyStore 指定的密钥库加载其密钥),但我不知道有任何 servlet 容器可以实际执行此操作。

    通常用作SSL客户端的证书与用作SSL服务器的证书不同。