Рейтинг:1

Отбрасывать соединения с несоответствующим CN сертификата клиента в обратном прокси-сервере nginx TCP

флаг gb

Я использую nginx, чтобы добавить функциональность TLS поверх существующего TCP-сервера (Redis), проксируя его следующим образом (пожалуйста, прочитайте, прежде чем сказать «Redis имеет встроенную поддержку TLS»):

транслировать {
  сервер {
    слушать 6379 ssl;

    ssl_certificate /etc/ssl/private/tls.crt;
    ssl_certificate_key /etc/ssl/private/tls.key;

    ssl_client_certificate /etc/ssl/private/ca.crt;
    ssl_verify_client включен;

    proxy_pass redis: 679;
  }
}

Однако это примет все клиентские сертификаты, подписанные указанным ЦС. Я хотел бы принимать только клиентские сертификаты с определенным CN: cn=api. При проксировании HTTP я могу использовать если такое заявление

если ($ ssl_client_s_dn! = "CN = API") {
  вернуть 403;
}

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

транслировать {
  восходящий поток redis_backend {
    сервер редис: 6379;
  }

  карта $ssl_client_s_dn $backend_svr {
    "CN=API" redis_backend;
    ноль по умолчанию;
  }

  сервер {
    ...

    прокси_пасс $backend_svr;
  }
}

Однако я не могу не чувствовать, что должен быть лучший способ отклонить соединение из-за несоответствия клиентских сертификатов.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.