errore di handshake ssl impossibile ottenere il certificato emittente locale

0

Ho un problema con la nuova integrazione su cui ci sto lavorando. Dovrei consumare un servizio web fornito da un'azienda esterna e questo servizio è su https, quindi per integrarsi con loro hanno condiviso tre certificati:

  1. root.cer
  2. Sahred.cer e l'emittente è Root.cer
  3. user.cer e l'emittente è Shared.cer

Li ho installati tutti e corro sotto i comandi senza blocco.

openssl collega il comando al servizio web con l'opzione showcerts

openssl s_client -showcerts -connect https://example.com:8443

uscita:

CONNECTED(00000003)
depth=1 C = UK, O = EXA, OU = EXA eTrust Center, CN = EXA Shared CA
verify error:num=20:unable to get local issuer certificate
140539532310416:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:s3_pkt.c:1493:SSL alert number 40
140539532310416:error:140790E5:SSL routines:ssl23_write:ssl handshake failure:s23_lib.c:177:
---
Certificate chain
 0 s:/C=SA/O=EXA/OU=EXA eTrust Center/CN=example.com
   i:/C=SA/O=EXA/OU=EXA eTrust Center/CN=EXA Shared CA
-----BEGIN CERTIFICATE-----
-----------
-----END CERTIFICATE-----
 1 s:/C=SA/O=EXA/OU=EXA eTrust Center/CN=EXA Shared CA
   i:/C=SA/O=EXA/OU=EXA eTrust Center/CN=EXA Root CA
-----BEGIN CERTIFICATE-----
------
-----END CERTIFICATE-----
---
Server certificate
subject=/C=SA/O=EXA/OU=EXA eTrust Center/CN=example.com
issuer=/C=SA/O=EXA/OU=EXA eTrust Center/CN=EXA Shared CA
---
No client certificate CA names sent

comando di arricciatura con debug di handshake:

curl -X POST https://example.com:8443 -iv

uscita:

 * TLSv1.2 (OUT), TLS header, Certificate Status (22):
} [5 bytes data]
 * TLSv1.2 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
 * TLSv1.2 (IN), TLS handshake, Server hello (2):
{ [87 bytes data]
 * TLSv1.2 (IN), TLS handshake, Certificate (11):
{ [3593 bytes data]
 * TLSv1.2 (OUT), TLS alert, Server hello (2):
} [2 bytes data]
 * SSL certificate problem: unable to get local issuer certificate
 * stopped the pause stream!

comando di arricciatura con debug di handshake e salta verifica:

curl -X POST https://example.com:8443 -iv -k

uscita:

 * TLSv1.2 (OUT), TLS header, Certificate Status (22):
} [5 bytes data]
 * TLSv1.2 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
 * TLSv1.2 (IN), TLS handshake, Server hello (2):
{ [87 bytes data]
 * TLSv1.2 (IN), TLS handshake, Certificate (11):
{ [3593 bytes data]
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
{ [333 bytes data]
 * TLSv1.2 (IN), TLS handshake, Request CERT (13):
{ [36 bytes data]
 * TLSv1.2 (IN), TLS handshake, Server finished (14):
{ [4 bytes data]
 * TLSv1.2 (OUT), TLS handshake, Certificate (11):
} [7 bytes data]
 * TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
} [70 bytes data]
 * TLSv1.2 (OUT), TLS change cipher, Client hello (1):
} [1 bytes data]
 * TLSv1.2 (OUT), TLS handshake, Finished (20):
} [16 bytes data]
 * TLSv1.2 (IN), TLS alert, Server hello (2):
{ [2 bytes data]
 * error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure

Le mie domande:

  • Quali sono i vantaggi derivanti dalla creazione di tre certificati con emittente così?
  • perché l'handshake di ssl ha fallito? Ho perso qualcosa nei miei comandi?
  • Hai idea di come posso gestire questi certificati o in affitto come funziona questa comunicazione?
  • Davvero non capisco come funzioni questa comunicazione. Come posso inviare questi certificati senza alcuna chiave privata. Basato sul mio capire quando vogliamo creare l'autenticazione basata su SSL dovrei creare una chiave pubblica e una chiave privata e dovrei condividerla chiave pubblica con la società esterna, in modo che possano decifrare il messaggio quando sono crittografato con la mia chiave privata. è giusto?

Ho anche postato una domanda con java in stackoverflow senza blocco, puoi dare un'occhiata per maggiori informazioni link

    
posta mzaje18 24.11.2018 - 21:51
fonte

1 risposta

0

Alcune letture di base su TLS / SSL

"SSL" è il vecchio nome, lo chiamerò "TLS" in questo post.

Dovresti fare un po 'di lettura per avere una comprensione di base di come funziona TLS. Googling "Come funziona l'handshake TLS?" dovresti procurarti dei buoni articoli Abbiamo anche un post generale di primer (pensavo che potrebbe essere più lungo e più dettagliato di quello che vuoi): Come funziona SSL / TLS?

Ecco un articolo specifico per il ricciolo su come funziona TLS: link

Perché una catena di CA?

È normale che i certificati HTTPS abbiano quella struttura con una CA radice e una CA di emissione e il certificato del sito Web, ad esempio, date un'occhiata al certificato per questa pagina:

Perrispondereallatuaquartadomanda:ilpuntodiquesticertificatiècheilserverpuòprovarticheèchidicediessere,quindiilsitowebconservalachiaveprivataetu(ilcliente)puoiusareilsuopubblicochiave(aka"certificato") per verificare che sia il server autentico. In nessun punto il client dimostra la propria identità al server (che di solito si ottiene includendo una chiave API nella richiesta).

Risolve il tuo errore

Ricorda che TLS riguarda la creazione di fiducia; la convalida del certificato di un server comprende questi passaggi:

  • Il certificato per l'utente finale è valido? Chi l'ha emesso e mi fido di loro?
  • Il certificato CA intermedio è valido? Chi l'ha emesso e mi fido di loro?
  • Il certificato CA radice è valido? Mi fido?

Quindi, durante la convalida, si "concatena" fino alla radice e quindi si controlla il "trust store" (un file sul computer dei certificati CA root che sono "attendibili") per vedere se quel cert root è lì. I sistemi operativi, i browser, ecc. Verranno spediti con un elenco di certificati CA radice di cui si fida. nel caso di curl, si tratta di un file sul disco chiamato curl-ca-bundle.crt .

La mia ipotesi è che la CA radice con cui si ha a che fare non sia nell'elenco predefinito di Curl, quindi è necessario aggiungerla manualmente. Nell'articolo arricciatura che ho collegato sopra, spiegano come farlo al punto 4.

Buona fortuna e benvenuto nel mondo di TLS e certificati!

    
risposta data 24.11.2018 - 22:10
fonte

Leggi altre domande sui tag