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:
- root.cer
- Sahred.cer e l'emittente è Root.cer
- 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