开发者社区> 问答> 正文

Spring Boot:单向SSL强制在客户端配置密钥存储

让我以Java安全性不是我精通的领域为开头。

我有许多通过REST调用进行通信的Spring Boot服务。配置为使用SSL / HTTPS时,需要为各种证书文件和相关信息提供访问和配置。目前,我们仅进行单向验证。稍后可能会进行双向验证。

我对单向验证如何工作的理解是,客户端可以访问信任存储,该存储包含有关将与之交互的任何服务器的公钥信息。给定的服务器将具有包含其密钥信息的密钥存储(我假设是公共的也是私有的)。当客户端尝试调用服务器时,两者之间会交换一些密钥信息,并且客户端会验证服务器的密钥信息是否包含在其信任库中。如果是这样,那么一切都很好,并且过程继续进行。如果不是,则呼叫被拒绝。我也觉得客户不需要密钥存储信息,因为它不会被任何东西调用。

在将服务配置为使用SSL时,需要设置许多SSL属性,如下所示:

server:
  port: <some port>
  ssl:
    enabled: true
    protocol: TLS
    trust-store-type: JKS
    trust-store: classpath:server.truststore
    trust-store-password: <password>
    key-store-type: JKS
    key-store: classpath:server.keystore
    key-store-password: <password>
    key-alias: <alias>

上面是服务器服务的示例。稍微切线,我认为永不调用其他任何内容的“服务器”服务将不需要信任存储库信息。

对于从来没有被任何人调用的客户服务,我认为我应该能够省去与密钥存储有关的信息。类似于以下内容:

server:
  port: <some port>
  ssl:
    enabled: true
    protocol: TLS
    trust-store-type: JKS
    trust-store: classpath:server.truststore
    trust-store-password: <password>

显然,它需要信任存储信息,但是我认为应该不需要任何密钥存储信息,因为它不是必需的。

但是,我不允许这样做。如果我尝试遗漏密钥存储库属性,则应用程序将因无法加载密钥库“空”而失败。如果启用了SSL,则无论是否需要,Spring Boot应用程序启动过程似乎都需要指定密钥存储属性。

有办法解决这个问题吗?

展开
收起
垚tutu 2019-12-12 09:47:19 803 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载

相关实验场景

更多