Let 'encrypt - nginx - grapado OCSP

11

Me gustaría habilitar el engrapado OCSP en mi servidor nginx. Estoy usando

  • Versión nginx: nginx / 1.6.2
  • debian
  • Encriptemos el certificado

Realmente no tengo experiencia en este asunto, por lo que podría ser un problema trivial.

Aquí mi configuración de seguridad nginx

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_dhparam /etc/ssl/private/dhparams_4096.pem;

Aquí mi sitio / configuración de seguridad del servidor:

    add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";

    # All files have been generated by Let's encrypt
    ssl_certificate /etc/letsencrypt/live/myexample.org/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/myexample.org/privkey.pem;

    # Everything below this line was added to enable OCSP stapling
    # What is that (generated file) and is that required at all?
    ssl_trusted_certificate /etc/letsencrypt/live/myexample.org/chain.pem;

    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

Leí que esto sería suficiente para habilitar el engrapado OCSP.

Pero si lo pruebo usando

 openssl s_client -connect myexample.org:443 -tls1 -tlsextdebug -status

Obtendré la siguiente respuesta:

TLS server extension "renegotiation info" (id=65281), len=1
0001 - <SPACES/NULS>
TLS server extension "EC point formats" (id=11), len=4
0000 - 03 00 01 02                                       ....
TLS server extension "session ticket" (id=35), len=0
TLS server extension "heartbeat" (id=15), len=1
0000 - 01                                                .
OCSP response: no response sent
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X1
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
 0 s:/CN=myexample.org
   i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X1
 1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X1
   i:/O=Digital Signature Trust Co./CN=DST Root CA X3
---
[...]

Especialmente

OCSP response: no response sent

¿Qué estoy haciendo mal?

Jerarquía de certificados:

  • DST Root CA X3
    • Encriptemos la autoridad X1
      • myexample.org

EDITAR:

OCSP: URI: http://ocsp.int-x1.letsencrypt.org/
CA-Issuer: URI: http://cert.int-x1.letsencrypt.org/
ST-DDT
fuente
¿Los certificados en su cadena tienen la URL OCSP establecida en su extensión AIA?
garethTheRed
1
@Braiam: ¿se ha vinculado al documento correcto? No hay una mención de OCSP allí. A quien hizo +1 ese comentario, ¿lo leíste primero?
garethTheRed
@garethTheRed He editado mi publicación para agregar la URL OCSP del certificado.
ST-DDT
@Braiam He leído su documento vinculado y AFAICT Hice todo como se describe allí correctamente. (Excepto el cronjob, que no es relevante para la seguridad ni para mi pregunta)
ST-DDT
¡Excelente! Está allá. Desafortunadamente, no he tratado mucho con nginx, así que realmente no puedo ayudarte a configurarlo. Si la URL estaba realmente allí fue lo primero que me vino a la mente. El único otro pensamiento es tu fullchain.pemy los chain.pemarchivos: ¿son iguales? ¿No debería la ssl_trusted_certificatedirectiva usar también el fullchain.pemarchivo?
garethTheRed

Respuestas:

10

Siguiendo la configuración estándar de nginx, no debería necesitar especificar una ssl_trusted_certificatecadena. Lo siguiente debería ser suficiente:

ssl_certificate /etc/letsencrypt/live/myexample.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/myexample.org/privkey.pem;
ssl_stapling on;
ssl_stapling_verify on;

Ver aquí para más contexto.

Chris
fuente
¡Agradable, esto simplifica mi nginx conf y funciona igual de bien!
Shautieh
Todavía recibo un error cuando lo pruebo con este sitio ssldecoder.org ¿ alguna pista?
Alexander Schranz
solucionó el problema cuando tiene múltiples ssl, necesita habilitarlo en todos los bloques, de lo contrario, nginx fallará en silencio.
Alexander Schranz
9

Encontré la solución basada en el tutorial que encontré allí :

cd /etc/ssl/private
wget -O - https://letsencrypt.org/certs/isrgrootx1.pem https://letsencrypt.org/certs/lets-encrypt-x1-cross-signed.pem https://letsencrypt.org/certs/letsencryptauthorityx1.pem https://www.identrust.com/certificates/trustid/root-download-x3.html | tee -a ca-certs.pem> /dev/null

y agregue esto a la configuración de su sitio / servidor

ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/ssl/private/ca-certs.pem;

Recargue su configuración

IMPORTANTE: Abra su navegador y acceda a su página web una vez.

Luego puede probar su servidor localmente con este cmd:

openssl s_client -connect myexample.org:443 -tls1 -tlsextdebug -status

Lo más probable es que obtenga una respuesta válida como esta

OCSP response:
======================================
OCSP Response Data:
    OCSP Response Status: successful (0x0)
    Response Type: Basic OCSP Response
    Version: 1 (0x0)
    Responder Id: C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X1

No te preocupes si obtienes un

Verify return code: 20 (unable to get local issuer certificate)

en la parte inferior también , el certificado Let's Encriptar aún no se encuentra en los almacenes de certificados confiables predeterminados. (No tengo mucha experiencia SSL, así que podría estar equivocado)

El error no aparecerá si ejecuta el siguiente cmd en el servidor:

openssl s_client -CApath /etc/ssl/private/ -connect myexample.org:443 -tls1 -tlsextdebug -status

Después de eso, puede probar su servidor usando:

https://www.digicert.com/help/

Tenga en cuenta que en este momento las respuestas de OCSP no serán recogidas por las pruebas de ssllabs. Supongo que esto se debe a que el certificado Let's Encriptar aún no se encuentra en los almacenes de certificados confiables predeterminados.

ST-DDT
fuente