当前位置: 首页 > 知识库问答 >
问题:

如何在应用程序中指定密钥库和信任存储。ssl客户端的yaml?

曾英睿
2023-03-14

我有一个spring boot应用程序,它调用一个支持ssl的rest服务,该服务需要相互ssl身份验证。我需要指定一个密钥存储和信任存储来在此客户端应用程序中进行调用。

当我在Java代码中指定keystore和trust store信息(key和trust store jks文件的路径、类型和密码)时,如下所示,调用就起作用了。

public static void main(String[] args) throws Exception {
    System.setProperty("javax.net.ssl.trustStore", "/path/to/tmnt-truststore");
    System.setProperty("javax.net.ssl.keyStore", "/path/to/donatello.p12");
    System.setProperty("javax.net.ssl.keyStoreType", "pkcs12");
    System.setProperty("javax.net.ssl.keyStorePassword", "donatellopass");

但是我怎么用application.yaml.

我尝试了下面的模式specifiyint keystore、truststore、key和trust store类型和密码,这正是我使用系统指定的所有信息。setProperty。

javax:
    net:
        ssl:
            trust-store: /path/to/tmnt-truststore

但不起作用。我得到错误的消息

sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

尝试为密钥存储和信任存储指定模式信任存储信任存储

该客户端应用程序还公开了一个restendpoint,该信息在与之相同的yaml文件中指定

server:
    context-path: /my-context
    port: 8200
spring:
    application:
        name: mhapp

应用程序似乎正在收集这些信息。但不是javax。网ssl。密钥库等。

我如何在应用程序中指定它。yaml我是否需要做其他事情,比如添加任何注释来加载该信息?

共有1个答案

巫马修为
2023-03-14

请在应用程序中尝试如下操作。首先是属性文件如果工作正常,可以将其放入yaml文件中,

server.ssl.key-alias=selfsigned
server.ssl.key-password=test123
server.ssl.key-store=classpath:keystore.jks
server.ssl.key-store-provider=SUN
server.ssl.key-store-type=JKS

如果没有,你可以把所有的值放在一个属性文件中,你可以创建一个配置文件,就像下面这样,这将给其余的模板调用外部服务,

@Configuration
public class SslConfiguration {
    @Value("${http.client.ssl.trust-store}")
    private Resource keyStore;
    @Value("${http.client.ssl.trust-store-password}")
    private String keyStorePassword;

    @Bean
    RestTemplate restTemplate() throws Exception {
        SSLContext sslContext = new SSLContextBuilder()
                .loadTrustMaterial(
                        keyStore.getURL(),
                        keyStorePassword.toCharArray()
                ).build();
        SSLConnectionSocketFactory socketFactory = 
                new SSLConnectionSocketFactory(sslContext);
        HttpClient httpClient = HttpClients.custom()
                .setSSLSocketFactory(socketFactory).build();
        HttpComponentsClientHttpRequestFactory factory = 
                new HttpComponentsClientHttpRequestFactory(httpClient);
        return new RestTemplate(factory);
    }
}
 类似资料:
  • 我写一个java应用程序连接到数据库与ssl连接使用jTDS。我已经向连接URL添加了属性ssl=需要,以启用ssl连接。 但是我找不到如何配置属性,在那里我可以指定使用哪个信任存储以及它的密码是什么?此处列出了所有jTDS连接属性:http://jtds.sourceforge.net/faq.html 根据此链接,SQL server jdbc驱动程序具有以下类型的属性trustStore和t

  • 我的客户端应用程序生成的数据在设备上加密。加密密钥通过HTTPS发送给Azure函数,该函数使用Azure密钥库存储加密密钥,以便其他授权的客户机可以获得加密密钥并解密数据。 下面是我的Azure函数中执行将加密密钥(秘密)保存在密钥库中的工作的一段代码: 问题 这样的设计是不是对Azure Key Vault的适当使用?

  • 问题内容: 我需要将2个密钥存储到KeyStore中,这是相关代码: 尽管我得到了执行,但“私钥必须带有证书链” 那到底是什么?以及我将如何生成它? 问题答案: 您还需要提供私钥条目的证书(公钥)。对于由CA签名的证书,链是CA的证书和最终证书。对于自签名证书,您只有自签名证书。 示例: 要生成证书,请点击以下链接: 示例:

  • 对于PGP想要使用的签名和加密密钥,我是否可以使用2个JCE、RSA或DSA keypairs?把它们保存在密钥库中,当我想使用这些密钥时,只需按需重建PGP基础结构?

  • 让我以Java安全不是我精通的一个领域作为前言。 我有许多通过REST调用进行通信的spring boot服务。当我配置为使用SSL/HTTPS时,我需要为各种证书文件和相关信息提供访问和配置。目前,我们只做单向验证。双向核查可能会在稍后时间进行。 我对单向验证如何工作的理解是,客户端可以访问信任存储区,该存储区包含关于它将与之交互的任何服务器的公钥信息。一个给定的服务器将有一个包含其密钥信息的密