Tengo un problema con la nueva integración en la que estoy trabajando. Debería consumir un servicio web provisto por una empresa externa y este servicio se realiza a través de https, por lo que para poder integrarlos, han compartido tres certificados:
- Root.cer
- Sahred.cer y el emisor es Root.cer
- user.cer y el emisor es Shared.cer
Los instalé todos y ejecuto los siguientes comandos sin bloqueo.
openssl connect comando al servicio web con opción de showcerts
openssl s_client -showcerts -connect https://example.com:8443
salida:
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 curl con depuración de protocolo de enlace:
curl -X POST https://example.com:8443 -iv
salida:
* 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 de curvatura con depuración de handshake y verificación de omisión:
curl -X POST https://example.com:8443 -iv -k
salida:
* 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
Mis preguntas:
- ¿Cuáles son los beneficios de crear tres certificados con el emisor? de esa manera?
- ¿Por qué ha fallado el protocolo ssl? ¿Me perdí algo en mis comandos?
- ¿Tiene alguna idea de cómo puedo manejar estos certificados o al menos cómo funciona esta comunicación?
- Realmente no entiendo cómo funciona esta comunicación. ¿Cómo puedo enviar estos certificados sin ninguna clave privada? Basado en mi entendiendo cuando queremos crear autenticación basada en SSL I Debería crear una clave pública y una clave privada y debería compartir esto Clave pública con la empresa externa, para que puedan descifrar el mensaje. cuando cifrado por mi clave privada. es esto correcto?
También he publicado una pregunta con java en stackoverflow sin bloqueo, puedes echar un vistazo para obtener más información. enlace