Spring Boot + Keycloak с использованием частного сертификата - PullRequest
0 голосов
/ 10 октября 2019

Приложение My Spring Boot прекрасно работало с KeyCloak с использованием публичного сертификата. Но так как мой Keycloak изменился на частный сертификат, я получаю следующую ошибку:

"An I/O error occurred while reading from the JWK Set source: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target"

Я уже получил частный сертификат, но не нашел успешного способа его установки;Если я свернусь к конечной точке Keycloack, передав сертификат в качестве параметра, он будет работать нормально.

curl --cacert mycertificate.crt -X GET \                                                                                                                                      130 ↵
https://keycloak.address.bla/auth/realms/my-app/protocol/openid-connect/certs

Я попытался настроить свой класс ResourceServerConfiguration для использования сертификата путем создания keystore.jks с использованием keytool из моего частногосертификат, но я не имел успеха;Когда я пытаюсь выполнить приведенный ниже код, я получаю следующую ошибку: «Невозможно загрузить ключи из хранилища: ресурс пути к классу [keystore.jks]»

  @Bean
  @Primary
  public JwtAccessTokenConverter createJwtAccessTokenConverter() {
    var jwtAccessTokenConverter = new JwtAccessTokenConverter();

    KeyStoreKeyFactory keyStoreKeyFactory = new KeyStoreKeyFactory(new ClassPathResource("/keystore.jks"), "changeit".toCharArray());
    jwtAccessTokenConverter.setKeyPair(keyStoreKeyFactory.getKeyPair("myAlias"));
    jwtAccessTokenConverter.setAccessTokenConverter(keycloakAccessTokenConverter);
    return jwtAccessTokenConverter;
  }

Мои application.properties

security.oauth2.resource.id=account
security.oauth2.resource.jwk.key-set-uri=${app.keycloak.api}/protocol/openid-connect/certs

Ответы [ 2 ]

0 голосов
/ 17 октября 2019

Проблема была решена простым импортом частного сертификата в мою JVM. После импорта файла ".crt" все мои запросы были выполнены успешно;

Команда для импорта файла .crt в JVM выглядит следующим образом: keytool -importcert -file my_certificate.crt -noprompt -alias certificate_alias -storepass changeit -keystore $JAVA_HOME/lib/security/cacerts

0 голосов
/ 10 октября 2019

Вы пытаетесь установить загрузчик классов?

KeyStoreKeyFactory keyStoreKeyFactory = new KeyStoreKeyFactory(new ClassPathResource("keystore.jks",this.getClass().getClassLoader()), "changeit".toCharArray());

Или вы можете использовать @Resource

@Value("classpath:keystore.jks")
Resource keystore;

...

 KeyStoreKeyFactory key = new KeyStoreKeyFactory(this.keystore, passphrase);
...