Как настроить доверенные центры сертификации AWS ELB?
Я хочу иметь собственную конфигурацию "доверенного центра сертификации" для своего API. Когда ELB не используется, я могу добиться этого, настроив файл "ca.pem" на своем веб-сервере. Однако при использовании ELB я думаю, что мой веб-сервер не получает исходный входящий клиентский сертификат (а вместо этого сертификат ELB).
Можно ли как-то заставить мой собственный CA вступить в силу, даже если за ELB?
1 ответ
Ваш экземпляр не только не видит сертификат исходного клиента... он фактически не участвует в том же сеансе TLS, что и клиент. ELB Classic и ALB создают два независимых сеанса TLS и связывают их полезные данные.
Чтобы делать то, что вы хотите, ELB вообще не может участвовать в TLS. Все это должно быть сделано вашим сервером, и балансировщик должен работать на уровне 4 или ниже. Это исключает Application Load Balancer, который работал только на уровне 7.
Есть два решения для этого.
Старым решением было использование ELB (Classic) в режиме TCP с отключенным TLS (SSL). ELB вслепую передает полезную нагрузку от зашифрованных соединений к экземпляру, который напрямую согласовывает TLS с браузером и, таким образом, может использовать свой файл CA для аутентификации браузера. Однако это становится немного сложнее, потому что по умолчанию ваш экземпляр не увидит IP-адрес клиента, а ELB работает в режиме уровня 4 (не говоря уже об обработке зашифрованного трафика, который он не понимает), он не может добавлять X-Forwarded-For
Заголовки... поэтому необходимо включить поддержку "Proxy protocol" на ELB, и ваш экземпляр должен понять, как извлечь адрес клиента из преамбулы Proxy protocol.
Более новое решение представляет собой балансировщик третьего типа, называемый балансировщиком сетевой нагрузки. Эта служба работает на уровне 3 и позволяет вам - по существу - сопоставить один эластичный IP-адрес с несколькими экземплярами EC2 для балансировки входящих запросов на определенных портах с проверками работоспособности для удаления нездоровых экземпляров из ротации. Ваши экземпляры по-прежнему отвечают за обработку всех TLS сами, но они увидят адрес клиента на входящем соединении.