Есть ли у кого-нибудь простой пример реализации взаимной аутентификации x509 в Spring Cloud Gateway / Spring WebFlux?

Я пытаюсь реализовать взаимную аутентификацию (аутентификацию с использованием клиентских сертификатов x509) в Spring Cloud Gateway, но на протяжении всего исследования я не мог понять, с чего начать.

Насколько я могу судить, аутентификация не выполняется через сам Spring Cloud Gateway, а должна выполняться через Spring WebFlux - пожалуйста, поправьте меня, если это неверное предположение. Я нашел примеры реализации сертификационной аутентификации через Spring Security, но не нашел ни одного с помощью WebFlux.

Может ли кто-нибудь предложить несколько советов или даже несколько примеров кода, которые помогут мне встать на правильный путь?


person Chatoyancy    schedule 20.09.2019    source источник
comment
В Spring-security 5.2.0RC1 есть поддержка X509. Я изо всех сил пытаюсь получить X509Certs из SecurityContext. Пожалуйста, дайте мне знать, если вы найдете какие-либо примеры для получения сертификатов.   -  person Surendra Poranki    schedule 04.10.2019


Ответы (1)


Вы можете настроить его в src/main/resources/application.yml, например

server:
  # for testing or development without SSL certs (HTTP) use an "appropriate"
  # non-secure port, e.g. 8080
  # for HTTPS use an "appropriate" secure port, e.g. 8443
  port: 8443
  ssl:
    # for HTTP set enabled to false, for HTTPS (with required client certs) set to true
    enabled: true
    # this is the spring cloud gateway _server_ cert
    key-store: /etc/pki/tls/private/server.p12
    key-store-password: servercertpassword
    key-store-type: PKCS12
    # this is the "bundle" of CA intermediate/root upon which the client cert has to
    # match
    trust-store: /etc/pki/ca-trust/extracted/java/cacerts
    # this `client-auth` option is where you *require* mutual-TLS, it can alternatively
    # be made optional
    client-auth: need
    trust-store-password: truststorepassword
    trust-store-type: JCEKS
management:
  # management port without SSL to allow monitoring/etc. without client certs
  # e.g. /actuator/health
  server:
    port: 8080
    ssl:
      enabled: false

Если у вас есть набор клиентских сертификатов, сертификат сервера и комплект доверенного хранилища / CA, это пример того, как настроить его в Spring Cloud Gateway.

X509 PreAuthenticatedAuthenticationToken будет доступен в вашем приложении для успешных подключений через взаимный TLS, содержащий принципала / детали сертификата клиента.

person Steve Goossens    schedule 23.06.2020