La verifica del certificato non riesce per il certificato autofirmato

0

Sto tentando di utilizzare un servizio che utilizza un certificato autofirmato.

  1. Scarica il certificato:

    # printf QUIT | openssl s_client -connect my-server.net:443 -showcerts 2>/dev/null >  my-server.net.crt
    
  2. Verifica che sia autofirmato (l'emittente e il soggetto sono uguali):

    # openssl x509 -subject -issuer -noout -in my-server.net.crt
    subject=O = Acme Co, CN = Controller Fake Certificate
    issuer=O = Acme Co, CN = Controller Fake Certificate
    
  3. Prova ad usarlo con l'opzione --cacert di curl:

    # curl https://my-server.net  --cacert my-server.net.crt
    curl: (60) SSL certificate problem: unable to get local issuer certificate
    More details here: https://curl.haxx.se/docs/sslcerts.html
    
    curl failed to verify the legitimacy of the server and therefore could not
    establish a secure connection to it. To learn more about this situation and
    how to fix it, please visit the web page mentioned above.
    

Non capisco perché il ricciolo non possa verificare il certificato.

    
posta little-dude 16.08.2018 - 21:53
fonte

2 risposte

2

Dai commenti:

Is this really a CA certificate, i.e. has it basic constrains CA true? ... – Steffen Ullrich
@SteffenUllrich you're right it has: CA:FALSE – little-dude

Per firmare un certificato è necessario che il certificato emittente abbia i flag corretti in modo tale che la firma sia effettivamente consentita. Per firmare correttamente un certificato, è necessario che il certificato emittente abbia i vincoli di base CA impostati su true. Questo vale sia per la firma di un altro certificato che per la firma dello stesso certificato (cioè autofirmato). Sembra che il certificato non abbia la CA corretta: flag vero nel caso qui.

Inoltre, l'opzione --cacert è come il suo nome dice solo per i certificati CA e non per i certificati arbitrari. Ad esempio se disponi dei certificati foglia di un sito che non puoi semplicemente aggiungere è affidabile come --cacert poiché è (di solito) non un certificato CA. Sarà semplicemente ignorato durante la lettura dei certificati dal file specificato.

    
risposta data 17.08.2018 - 05:56
fonte
1

Due ipotesi:

1. È permesso fare l'autenticazione del server?

Controlla il campo Uso chiave esteso / avanzato del tuo certificato autofirmato.

2. Il nome host del server viene visualizzato nei campi CN o SAN?

Curl verificherà che il certificato restituito dal server corrisponda al nome host richiesto ( my-server.net ).

    
risposta data 16.08.2018 - 21:59
fonte

Leggi altre domande sui tag