Конфигурация хранилища ключей в yml - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь вызвать двустороннюю систему, защищенную SSL, используя ключ и сертификат с RestTemplate.Я использовал хранилище ключей для настройки сертификата и ключа.Вот шаги для генерации хранилища ключей.

  1. openssl pkcs12 -export -in cert.pem -inkey "privateKey.pem" -certfile cert.pem -out myProject_keyAndCertBundle.p12
  2. keytool -importkeystore -srckeystore myProject_keyAndCertBundle.p12 -srcstoretype PKCS12 -destkeystore keystore.jks.jks

Затем я настроил его в своем главном классе, как показано ниже.

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);


        System.setProperty("javax.net.ssl.keyStore", "keystore.jks");
        System.setProperty("javax.net.ssl.keyStorePassword", "password");
        System.setProperty("javax.net.ssl.keyStoreType", "JKS");
    }

}

Он успешно работает.

Мой вопрос: есть ли способ установить хранилище ключей в application.yml

Я пробовал, как показано ниже.Но в этом случае мне также нужен сертификат для подключения к моему приложению с весенней загрузкой.

server:
  port: 8443
  ssl:
    key-store: classpath:keystore.jks
    key-store-password: password
security:
  headers:
    hsts: NONE

1 Ответ

0 голосов
/ 21 декабря 2018

То, что вы делаете в application.yml, защищает ваше приложение springboot.Вы защищаете свое приложение springboot с помощью предоставленного вам закрытого ключа, что неверно.

Вам нужна возможность динамически загружать хранилище ключей, которое было вам дано, перед тем, как выполнить внешний вызов службы,как это:

// Key Store
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(clientKeyStore, clientKeyStorePwd);

// Trust Store
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(serverTrustStore);

SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);

HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());

Часть хранилища ключей - это хранилище ключей, которое было вам дано и которое содержит закрытый ключ и цепочку сертификатов.А в TrustStore просто содержится цепочка ЦС, подписавшая закрытый ключ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...