Tengo una .archivo pfx, que perfectamente se puede conectar con el servidor remoto cuando se utiliza en un cliente de windows. Quiero que se conecte a un servidor mediante un cliente de linux.

Problema 1) he utilizado los siguientes comandos openssl para extraer público certificado y la clave privada desde el archivo pfx,

openssl pkcs12 -in Name.pfx -nocerts -out priv.pem -nodes
openssl pkcs12 -in Name.pfx -nokeys -out pub.pem

Pero cuando me encontré con dos comandos siguientes para comprobar el md5 de ambos archivos, me encontré con dos de ellos diferentes.

openssl rsa -noout -text -in priv.pem | openssl md5
openssl x509 -noout -text -in pub.pem | openssl md5

Problema 2) en su lugar utilicé siguiente comando para extraer solo pem archivo de pfx que tiene tanto cert y key.

openssl pkcs12 -in Name.pfx -out bundle.pem

El uso de este archivo pem he intentado conectar con el servidor remoto, con el siguiente comando :

openssl s_client -servername 1.2.3.4 -connect 1.2.3.4:1234 -CAfile bundle.pem -state -tls1_2

Esto da la siguiente salida en la terminal de

CONNECTED(00000003)
SSL_connect:before/connect initialization
SSL_connect:SSLv3 write client hello A
SSL_connect:SSLv3 read server hello A
depth=0 O = "My Name", CN = Name - Local
verify return:1
SSL_connect:SSLv3 read server certificate A
SSL_connect:SSLv3 read server key exchange A
SSL_connect:SSLv3 read server certificate request A
SSL_connect:SSLv3 read server done A
SSL_connect:SSLv3 write client certificate A
SSL_connect:SSLv3 write client key exchange A
SSL_connect:SSLv3 write change cipher spec A
SSL_connect:SSLv3 write finished A
SSL_connect:SSLv3 flush data
SSL3 alert read:fatal:handshake failure
SSL_connect:failed in SSLv3 read finished A
140250807310240:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:s3_pkt.c:1275:SSL alert number 40
140250807310240:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:s3_pkt.c:598:
---
Certificate chain
 0 s:/O=My Name /CN=Name - Local
   i:/O=My Name /CN=Name - Local
---
Server certificate
-----BEGIN CERTIFICATE-----
<random string of certificate>
-----END CERTIFICATE-----
subject=/O=My Name /CN=Name - Local
issuer=/O=My Name /CN=Name - Local
---
No client certificate CA names sent
Server Temp Key: ECDH, secp521r1, 521 bits
---
SSL handshake has read 1332 bytes and written 206 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
    Session-ID: <some string>
    Session-ID-ctx: 
    Master-Key: <some string>
    Key-Arg   : None
    Krb5 Principal: None
    PSK identity: None
    PSK identity hint: None
    Start Time: 1495217834
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
---

No puedo averiguar por qué se apretón de manos fallando. Atascado durante 3 días, donde se hace exactamente el problema de la mentira.

InformationsquelleAutor Abhay Jain | 2017-05-19

1 Comentario

  1. 1

    Pero cuando me encontré con dos comandos siguientes para comprobar el md5 de ambos archivos, me encontré con dos de ellos diferentes.

    openssl rsa -noout -text -in priv.pem | openssl md5
    openssl x509 -noout -text -in pub.pem | openssl md5
    

    El primer comando muestra la información textual acerca de la clave privada. La segunda información textual sobre el certificado que contiene la clave pública. Por supuesto, estas informaciones son diferentes.

    El uso de este archivo pem he intentado conectar con el servidor remoto, con el siguiente comando :

    openssl s_client -servername 1.2.3.4 -connect 1.2.3.4:1234 -CAfile bundle.pem -state -tls1_2
    

    Para ello se utiliza el certificado de CA de confianza (-CAfile). Esto es probablemente lo que usted desea. En cambio usted desea utilizar el certificado como un certificado de cliente. Esto debe hacerse como se documenta mediante el uso de las opciones -cert y -key, es decir, -cert bundle.pem -key bundle.pem en su caso.

    Aparte de que -servername debe ser un nombre de host de una dirección IP. Si usted no tiene un nombre de host omitir esta opción.

    SSL_connect:SSLv3 read server certificate request A
    ...
    SSL_connect:SSLv3 write client certificate A
    ...
    SSL3 alert read:fatal:handshake failure
    

    Ya que no especifica el certificado de cliente correctamente vacío de un certificado de cliente se puede enviar. Pero el servidor espera un certificado de cliente válido y por lo tanto el informe de un error de protocolo de enlace dentro de un SSL alerta de vuelta al cliente.

    • Pero hay artículos ( como kb.wisc.edu/middleware/page.php?id=4064 ) que dicen que el md5 de la salida de esos dos archivos debe ser el mismo. También, he quitado CAfile bandera y en lugar de utilizar cert & clave banderas como usted sugiere. El terminal pide la contraseña y, a continuación, se produce de nuevo diciendo: «error de configuración de la clave privada 140495240427424:error:0B080074:certificado x509 rutinas:X509_check_private_key:los valores de la clave no coincide:x509_cmp.c:331:»
    • Usted está utilizando la opción de -text. En el artículo se hace referencia a la opción de -modulus se utiliza en su lugar. Con la última opción, el resultado debe ser el mismo, con la primera opción no.
    • y en cuanto a tu otro problema, vea stackoverflow.com/questions/4658484/…
    • He sustituido texto con el módulo, pero que todavía no coincide. Estoy utilizando mal el comando para extraer de pfx?
    • mi conjetura es que su archivo pfx contiene varios certificados, es decir, certificado de hoja y de la cadena de certificados. En este caso openssl x509 va a tomar el primer exportado uno que podría ser el mal (es decir, que la cadena de certificados) y, por tanto, no coincide con la clave. Y a causa de este mal fin de obtener también los problemas posteriores, como se describe en la pregunta que me has enlazado. Intente utilizar -clcerts para exportar el certificado de hoja única.
    • Yo tenía el mismo problema y agregar el certificado de cliente se ha resuelto. Pero no entiendo por qué se debe proporcionar, que debería ser opcional, ¿no es cierto?
    • Es totalmente hasta el servidor si a) solicita un certificado de cliente en primer lugar, y b) acepta que el cliente no envía ninguna, incluso si se solicita. Si el servidor requiere un certificado de cliente, a continuación, proporcionar esto no es opcional.

Dejar respuesta

Please enter your comment!
Please enter your name here