¿Cómo puedo dejar que nginx registre el protocolo SSL / TLS y el cifrado utilizados?

24

Mi objetivo es garantizar la seguridad adecuada para los clientes que se conectan a mi nginx. Estoy siguiendo la guía de Mozilla para configurar TLS correctamente en mi instalación de nginx, pero no tengo una descripción general de los protocolos / conjuntos de cifrado reales que se utilizan en la práctica.

Lo que tengo ahora:

server {
    listen 443;
    ssl on;
    ssl_certificate /path/to/signed_cert_plus_intermediates;
    ssl_certificate_key /path/to/private_key;
    ssl_dhparam /path/to/dhparam.pem;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'the_long_ciphersuite_listed_there';
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:50m;
}

Con esto, me gustaría registrar qué protocolo SSL se usó para una conexión y qué conjunto de cifrado se eligió después de que el cliente / servidor negoció. P.ej:

10.1.2.3 - - [13/Aug/2014:12:34:56 +0200] "GET / HTTP/1.1" 200 1234 "-" "User agent bla"

a

10.1.2.3 - - [13/Aug/2014:12:34:56 +0200] ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 "GET / HTTP/1.1" 200 1234 "-" "User agent bla"

De esta forma, puedo identificar rápidamente a los clientes que usan navegadores obsoletos o máquinas automatizadas que no admiten PFS u otras tecnologías relevantes de seguridad.

¿Cómo configuro nginx para registrar esta información?

gertvdijk
fuente

Respuestas:

44

Añadir $ssl_ciphera su log_formatconfiguración.

Consulte http://nginx.org/en/docs/http/ngx_http_ssl_module.html#variables para todas las variables relacionadas con SSL.

Ejemplo

Defina una costumbre log_formaten el httpcontexto (por ejemplo /etc/nginx/nginx.conf):

log_format combined_ssl '$remote_addr - $remote_user [$time_local] '
                        '$ssl_protocol/$ssl_cipher '
                        '"$request" $status $body_bytes_sent '
                        '"$http_referer" "$http_user_agent"';

Lo anterior se basa en el combinedformato predeterminado con una '$ssl_protocol/$ssl_cipher 'línea adicional .

Luego agregue en un servercontexto (con SSL habilitado) la access_logdirectiva con el formato de registro personalizado:

server {
  listen 443;
  ssl on;
  access_log /var/log/nginx/access.log combined_ssl;
  [...]
}

Después de reiniciar nginx, los registros aparecen como:

10.1.2.3 - - [13/Aug/2014:12:34:56 +0200] TLSv1.2/ECDHE-RSA-AES128-GCM-SHA256 "GET / HTTP/1.1" 200 1234 "-" "User agent bla"
praseodimio
fuente