Я хочу принудительно подтвердить ssl-клиент на одном из моих виртуальных хостов. Но получите сообщение «Не требуется сертификат SSL был отправлен», пытаясь получить что-то из него.
Вот мои тестовые конфигурации:
# defaults
ssl_certificate /etc/certs/server.cer;
ssl_certificate_key /etc/certs/privkey-server.pem;
ssl_client_certificate /etc/certs/allcas.pem;
server {
listen 1443 ssl;
server_name server1.example.com;
root /tmp/root/server1;
ssl_verify_client off;
}
server {
listen 1443 ssl;
server_name server2.example.com;
root /tmp/root/server2;
ssl_verify_client on;
}
Первый сервер отвечает HTTP-кодом 200, а второй возвращает «400 Bad Request, не был отправлен обязательный сертификат SSL, nginx / 1.0.4».
Возможно, нельзя использовать ssl_verify_client на том же IP? Должен ли я связать эти серверы с разными IP-адресами, это решит мою проблему?
Я не эксперт по nginx, но я видел похожие проблемы с Apache, использующим SSL и виртуальные хосты. Проблема заключается в порядке, в котором сервер обрабатывает согласование SSL по сравнению с выбором виртуального хоста. Первый шаг - установить зашифрованное соединение, и только после этого сервер увидит, какое имя хоста вы запрашиваете. И до тех пор, пока он не узнает, он будет использовать настройку по умолчанию, которая в данном случае является первым хостом, для которого требуется сертификат клиента для установления соединения SSL.
Итак, короткий ответ - в этом случае вам лучше иметь либо отдельные порты, либо отдельные IP-адреса.
источник
Я столкнулся с той же проблемой и нашел решение.
Пожалуйста, попробуйте добавить
default_server
флаг для второго сервераисточник