В Cloud Foundry Я настроил его так, чтобы сертификат клиента пересылался в мое приложение весенней загрузки.
Сертификат помещается в заголовок x-forwarded-client-cert
, приложение весенней загрузки считывает это? И проверяет, находится ли CN в белом списке, и отправляет соответствующий ответ. К сожалению, я не могу повторить это поведение с помощью теста. Я продолжаю получать (в отладочном выводе):
"сертификат клиента не найден в запросе"
Я использую REST Assured и мой тест выглядит так:
String cert = StreamUtils.copyToString(
new ClassPathResource("certs/client/client_mod.crt").getInputStream(), Charset.defaultCharset());
cert = cert.replace("\r\n", "").replace("\n", "");
given()
.spec(spec)
.header("x-forwarded-client-cert", cert)
.when()
.get(HealthResource.BASE_URL + "/ip-reverse-lookup")
.then()
.statusCode(HttpStatus.OK.value());
Базовое значение URI для этого http://localhost
. Сертификат клиента "-----BEGIN CERTIFICATE-----"
и "-----END CERTIFICATE-----"
был удален, а новые строки удалены (как вы можете видеть в коде выше).
В моем application.yml у меня есть это:
server:
ssl:
enabled: false
key-store:
key-store-password:
trust-store:
trust-store-password:
client-auth: need
Метод configure
класса, расширяющего WebSecurityConfigurerAdapter
, выглядит следующим образом:
http
.x509()
.subjectPrincipalRegex("CN=(.*?)(?:,|$)")
.userDetailsService(customUserDetailsService)
.and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER)
.and()
.csrf().disable();
Любая помощь / предложения будут оценены.
Спасибо.