Как я могу указать хранилище ключей и хранилище доверия в application.yaml для клиента ssl? - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть приложение весенней загрузки, которое вызывает службу отдыха с поддержкой ssl, требующую взаимной аутентификации ssl.Мне нужно указать хранилище ключей и хранилище доверенных сертификатов, чтобы сделать вызов в этом клиентском приложении.

Когда я указываю информацию о хранилище ключей и доверенном хранилище (пути, типы и пароли как файлов ключей, так и хранилищ доверенных сертификатов) внутрикод Java, как показано ниже, вызов работает.

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.

Я попытался с помощью следующего шаблона указатьinttore keystore, truststore, key итипы доверенных хранилищ и пароли, в точности вся информация, которую я указал с помощью System.setProperty.

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

Но не работает.Я получаю сообщение об ошибке

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

Попытка указать оба шаблона trust-store и trustStore для хранилища ключей и хранилища доверия.

Это клиентское приложение также предоставляет конечную точку отдыха, и эта информацияуказано в том же файле yaml, что и

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

Эта информация, похоже, воспринимается приложением.Но не javax.net.ssl.keyStore и т. Д.

Как мне указать это в application.yaml и нужно ли делать что-то еще, например, добавлять аннотации, чтобы загрузить эту информацию?

1 Ответ

0 голосов
/ 19 сентября 2019

Пожалуйста, попробуйте, как показано ниже, в файле application.property, если он работает нормально, вы можете поместить его в файл 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...