让我以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应用程序启动过程似乎都需要指定密钥存储属性。
有办法解决这个问题吗?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。