Haproxy с несколькими конфигурациями CA

Новичок в SSL, использующий haproxy 1.8, столкнулся с ситуацией, когда у меня есть 2 шлюза API aws, указывающих на один и тот же прокси-сервер, и 2 клиентских сертификата, сгенерированных самим шлюзом API, назначенным по одному для каждого шлюза.

Теперь у меня есть haproxy-сервер, который я пытаюсь настроить таким образом, чтобы разрешить доступ только с этих двух API-шлюзов.

Когда я делаю это только для шлюза API, то есть я устанавливаю ca-файл только в файл, содержащий 1 клиентский сертификат, он работает нормально, как и ожидалось, но я не знаю, как разрешить оба клиентских сертификата.

поэтому у меня есть эти файлы:

  • haproxy.pem, который содержит
    • сертификат сервера, выданный go daddy
    • закрытый ключ
    • иди папочка сертификаты
  • api-gw.pem первый сертификат клиента, который был скопирован со шлюза API
  • API-gw2.pem второй сертификат клиента, который был скопирован со шлюза API
  • клиент-certs.crt, который представляет собой объединенную версию api-gw.pem и API-gw2.pem.

когда я привязываю ssl, как показано ниже, для сертификата клиента, он отлично работает:

bind :443 ssl crt /etc/haproxy/haproxy.pem verify required ca-file /etc/haproxy/api-gw.pem

или

bind :443 ssl crt /etc/haproxy/haproxy.pem verify required ca-file /etc/haproxy/api-gw2.pem

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

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

bind :443 ssl crt /etc/haproxy/haproxy.pem verify required ca-file /etc/haproxy/client-certs.pem

Поскольку мои знания ограничены, когда дело доходит до сертификатов и ssl, я не уверен, что это сработает, чтобы поместить несколько клиентских сертификатов в один файл, но из того, что я прочитал в Интернете, это предлагается таким образом... Я все еще не понимаю. не знаю, почему это не сработает.

РЕДАКТИРОВАТЬ Я предложил, Майкл, я соединил оба клиентских сертификата, используя

cat api-gw.pem api-gw2.pem > api-gw-combo.pem

и комбо-файл выглядит так:

-----BEGIN CERTIFICATE-----
.....cert content for api-gw
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
.....cert content for api-gw2
-----END CERTIFICATE-----

но так же, как и мой исходный файл client-certs.crt, haproxy по-прежнему принимает только первый сертификат.

Внутри /etc/haproxy попробуйте объединить два файла pem, например. cat api-gw.pem api-gw2.pem > api-gw-combo.pem, а затем установите ca-file /etc/haproxy/api-gw-combo.pem. Непроверено, но если можно сделать, подозреваю, что это будет решением.

Michael - sqlbot 18.01.2019 04:04

@Michael-sqlbot, client-certs.crt был создан таким же образом, но в любом случае я пробовал, и это не сработало.

arash moeen 18.01.2019 04:57

также, когда я делаю cat, он добавит ^N в конец каждой строки первого сертификата (Я не имею понятия почему), которую я должен был очистить, а также добавит новую строку для второго сертификата.

arash moeen 18.01.2019 04:58

Что именно произошло, когда это «не сработало»? В документах указано ca-file«обозначает файл PEM, из которого загружаются сертификаты ЦС, используемые для проверки сертификата клиента». Обратите внимание, что «сертификаты» — множественное число.

Michael - sqlbot 18.01.2019 14:19

@Michael-sqlbot Я имею в виду, что он принимает только первый ca и действует так, как второй не существует. Есть ли какой-то конкретный формат, которому он должен следовать, кроме обычного формата PEM с тегами BEGIN и END?

arash moeen 18.01.2019 19:04

@ Michael-sqlbot Я тоже видел документацию, вот что заставило меня подумать, что, возможно, что-то не так с моим способом слияния сертификатов. Я собираюсь отредактировать вопрос, чтобы добавить, как выглядит комбо

arash moeen 18.01.2019 19:12

Если все это работает так, как кажется, то способ объединения сертификатов кажется правильным. Аутентификация клиента TLS (насколько я помню) означает, что сервер отправляет DN всех признанных ЦС в рукопожатии TLS. Это означает, что вы должны быть в состоянии подтвердить, что он действительно перечисляет их обоих, используя openssl s_client.

Michael - sqlbot 18.01.2019 20:23

@Michael-sqlbot Я сгенерировал 2 самоподписанных сертификата (с другим общим названием) и объединил их в виде комбинированного файла и прикрепил к haproxy, и он работал, как и ожидалось, но все еще не работает, когда я помещаю 2 сертификата API GW. Может быть, это потому, что они оба имеют одно и то же общее имя? (api gw всегда использует одно и то же общее имя для создания клиентских сертификатов)

arash moeen 20.01.2019 05:02
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
8
1 744
0

Другие вопросы по теме