Pozwól szyfrować - zszywanie - nginx - OCSP

11

Chciałbym włączyć zszywanie OCSP na moim serwerze nginx. używam

  • Wersja nginx: nginx / 1.6.2
  • debian
  • Zaszyfrujmy certyfikat

Jestem naprawdę niedoświadczony w tej sprawie, więc może to być trywialna kwestia.

Oto moja konfiguracja bezpieczeństwa 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;

Tutaj moja konfiguracja bezpieczeństwa strony / serwera:

    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;

Przeczytałem, że to wystarczy, aby umożliwić zszywanie OCSP.

Ale jeśli przetestuję to za pomocą

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

Otrzymam następującą odpowiedź:

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
---
[...]

Szczególnie

OCSP response: no response sent

Co ja robię źle?

Hierarchia certyfikatów:

  • DST Root CA X3
    • Let's Encrypt Authority X1
      • myexample.org

EDYTOWAĆ:

OCSP: URI: http://ocsp.int-x1.letsencrypt.org/
CA-Issuer: URI: http://cert.int-x1.letsencrypt.org/
ST-DDT
źródło
Czy certyfikaty w twoim łańcuchu mają ustawiony adres URL OCSP w swoim rozszerzeniu AIA?
garethTheRed
1
@Braiam - czy masz link do właściwego dokumentu? Nie ma tam wzmianki o OCSP. Ktokolwiek daje +1 temu komentarzowi - czytasz go pierwszy?
garethTheRed
@garethTheRed Edytowałem swój post, aby dodać adres URL OCSP z certyfikatu.
ST-DDT
@Braiam Przeczytałem twój połączony dokument i AFAICT zrobiłem wszystko, jak tam opisano poprawnie. (Z wyjątkiem koleżanki, która nie ma znaczenia dla bezpieczeństwa ani mojego pytania)
ST-DDT
Świetny! Jest tutaj. Niestety, nie zajmowałem się zbytnio nginx, więc nie mogę pomóc w jego konfiguracji. Czy rzeczywiście był to adres URL, pojawiła się pierwsza rzecz. Jedyną inną myślą jest twoja fullchain.pemi chain.pempliki - czy są takie same? Czy ssl_trusted_certificatedyrektywa nie powinna również wykorzystywać fullchain.pempliku?
garethTheRed

Odpowiedzi:

10

Zgodnie ze standardową konfiguracją nginx nie trzeba określać ssl_trusted_certificatełańcucha. Powinno wystarczyć:

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;

Zobacz tutaj dla dalszego kontekstu.

Chris
źródło
Fajnie, to upraszcza moją konfigurację nginx i działa równie dobrze!
Shautieh
Nadal pojawia się błąd, gdy testuję go za pomocą tej witryny ssldecoder.org. Jakaś wskazówka?
Alexander Schranz,
naprawiłem problem, gdy masz wiele ssl, musisz włączyć go we wszystkich blokach, w przeciwnym razie nginx zawiedzie po cichu.
Alexander Schranz,
9

Znalazłem rozwiązanie na podstawie samouczka, który tam znalazłem :

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

i dodaj to do konfiguracji strony / serwera

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

Załaduj ponownie swoją konfigurację

WAŻNE: Otwórz przeglądarkę i uzyskaj dostęp do strony internetowej jeden raz.

Następnie możesz przetestować serwer lokalnie za pomocą tego polecenia cmd:

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

Najprawdopodobniej otrzymasz prawidłową odpowiedź w ten sposób

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

Nie martw się, jeśli dostaniesz

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

na dole , jak również , szyfrowania certyfikat niech nie jest jeszcze w domyślnym zaufanych sklepów certyfikatów. (Nie mam dużego doświadczenia ssl, więc mogę się mylić)

Błąd nie pojawi się, jeśli uruchomisz następujące polecenie cmd na serwerze:

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

Następnie możesz przetestować serwer za pomocą:

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

Pamiętaj, że teraz odpowiedzi OCSP nie zostaną wykryte przez testy ssllabs. Zakładam, że dzieje się tak, ponieważ certyfikat Let's encrypt nie znajduje się jeszcze w domyślnych zaufanych magazynach certyfikatów.

ST-DDT
źródło