Quiero forzar la verificación del cliente SSL para uno de mis hosts virtuales. Pero aparece el error "No se envió el certificado SSL requerido", intentando obtener algo de él.
Aquí están mis configuraciones de prueba:
# 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;
}
El primer servidor responde con 200 códigos http, pero el segundo devuelve "400 Solicitud incorrecta, no se envió ningún certificado SSL requerido, nginx / 1.0.4".
Probablemente, ¿es imposible usar ssl_verify_client en la misma IP? ¿Debo vincular estos servidores a diferentes IP? ¿Resolverá mi problema?
No soy un experto en nginx, pero he visto problemas similares con apache usando SSL y hosts virtuales. El problema es el orden en que el servidor maneja la negociación SSL frente a la elección del host virtual. El primer paso es establecer la conexión encriptada, y solo después de eso, el servidor ve qué nombre de host está solicitando. Y hasta que lo sepa, usará la configuración predeterminada, que en este caso es el primer host, que requiere un certificado de cliente para establecer la conexión SSL.
Entonces, respuesta corta: en este caso, sería mejor tener puertos separados o direcciones IP separadas.
fuente
Encontré el mismo problema y encontré una solución.
Intente agregar una
default_server
marca para el segundo servidorfuente