Новичок в SSL, использующий haproxy 1.8, столкнулся с ситуацией, когда у меня есть 2 шлюза API aws, указывающих на один и тот же прокси-сервер, и 2 клиентских сертификата, сгенерированных самим шлюзом API, назначенным по одному для каждого шлюза.
Теперь у меня есть haproxy-сервер, который я пытаюсь настроить таким образом, чтобы разрешить доступ только с этих двух API-шлюзов.
Когда я делаю это только для шлюза API, то есть я устанавливаю ca-файл только в файл, содержащий 1 клиентский сертификат, он работает нормально, как и ожидалось, но я не знаю, как разрешить оба клиентских сертификата.
поэтому у меня есть эти файлы:
когда я привязываю 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 по-прежнему принимает только первый сертификат.
@Michael-sqlbot, client-certs.crt был создан таким же образом, но в любом случае я пробовал, и это не сработало.
также, когда я делаю cat, он добавит ^N в конец каждой строки первого сертификата (Я не имею понятия почему), которую я должен был очистить, а также добавит новую строку для второго сертификата.
Что именно произошло, когда это «не сработало»? В документах указано ca-file«обозначает файл PEM, из которого загружаются сертификаты ЦС, используемые для проверки сертификата клиента». Обратите внимание, что «сертификаты» — множественное число.
@Michael-sqlbot Я имею в виду, что он принимает только первый ca и действует так, как второй не существует. Есть ли какой-то конкретный формат, которому он должен следовать, кроме обычного формата PEM с тегами BEGIN и END?
@ Michael-sqlbot Я тоже видел документацию, вот что заставило меня подумать, что, возможно, что-то не так с моим способом слияния сертификатов. Я собираюсь отредактировать вопрос, чтобы добавить, как выглядит комбо
Если все это работает так, как кажется, то способ объединения сертификатов кажется правильным. Аутентификация клиента TLS (насколько я помню) означает, что сервер отправляет DN всех признанных ЦС в рукопожатии TLS. Это означает, что вы должны быть в состоянии подтвердить, что он действительно перечисляет их обоих, используя openssl s_client.
@Michael-sqlbot Я сгенерировал 2 самоподписанных сертификата (с другим общим названием) и объединил их в виде комбинированного файла и прикрепил к haproxy, и он работал, как и ожидалось, но все еще не работает, когда я помещаю 2 сертификата API GW. Может быть, это потому, что они оба имеют одно и то же общее имя? (api gw всегда использует одно и то же общее имя для создания клиентских сертификатов)





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