[noPoll] Duda Nopoll SSL/TLS con certificados Cliente

Javier Mora Alonso jmora at AVALONINFORMATICA.COM
Tue Feb 21 08:34:10 CET 2023


Buenos días,

Lo primero muchas gracias por la respuesta, con la misma solicité el certificado a la parte contraria y me acaba de llegar, he intentado probar con el ca.crt que me han proporcionado y he obtenido el mismo resultado. He intentado hacer un root.pem partiendo del ca.crt (openssl x509 -in ca.crt -out root.pem -outform PEM) y nada tampoco.

No sé si se le puede ocurrir algo mas de lo que debo estar haciendo mal, directamente le copio aquí la función de conectar, no está muy limpia, por lo que le pido perdón, llevaré 1000 intentos y ya estoy rozando el bloqueo.

int Conecta_WS()
{
      int err = 0;
      int ret = 0;
      int r = 0;
      char aux_port[10];
      char aux_conn1[126];
      char aux_conn2[256];
      char aux_conn3[2056];
      char comando[1024];
      char * encoded;
      size_t bytes;
      char user_pass_orig[512];
      char user_pass_https[1024];
      
      noPollConnOpts * opts;
      noPollPtr user_data;
           SSL_CTX *ctx_ssl;

      SSL_library_init();

      tpp_logerror( "Conn_WS");
      
      ctx = create_ctx ();
      
      OpenSSL_add_all_algorithms();
             SSL_load_error_strings();

      memset(aux_port, 0, sizeof(aux_port));
      sprintf(aux_port, "%d", puerto);

      memset(aux_conn1, 0, sizeof(aux_conn1));
      sprintf(aux_conn1, "%s:%s", url_pm, aux_port);
      
      memset(aux_conn2, 0, sizeof(aux_conn2));
      sprintf(aux_conn2, "https://%s", url_pm, aux_port);
      
      tpp_logerror( "Conn_WS Con cert [%s][%s]", url_pm, aux_port);

      opts = nopoll_conn_opts_new ();

      memset(user_pass_orig, 0, sizeof(user_pass_orig));
      memset(user_pass_https, 0, sizeof(user_pass_https));
      strcpy(user_pass_orig, "txn-Avalon:TkWlUqkqQkX7yMs35ybGhVoUq6tQHKyE");
      encoded = base64_encode(user_pass_orig, strlen(user_pass_orig), &bytes);
      strncpy(user_pass_https, encoded, bytes);
      user_pass_https[bytes] = '\0';
      free(encoded);

      tpp_logerror( "Header 1 : [%s]", user_pass_https);

      memset(aux_conn3, 0, sizeof(aux_conn3));
      sprintf(aux_conn3, "\r\nAuthorization: Basic %s \r\nX-Txn-Token: %s", user_pass_https, "zT5s3rEL6SCKwTYP2fdtPz7MJ");
      //sprintf(aux_conn3, "\r\nAuthorization:Basic %s\r\nX-Txn-Token:%s",
      //          "dHhuLUF2YWxvbjpUa1dsVXFrcVFrWDd5TXMzNXliR2hWb1VxNnRRSEt5RQ==", "zT5s3rEL6SCKwTYP2fdtPz7MJ");

      tpp_logerror( "Headers : [%s]", aux_conn3);

      nopoll_conn_opts_set_extra_headers(opts, aux_conn3);

      /* create options */
//    opts     = nopoll_conn_opts_new ();
//    nopoll_conn_opts_set_ssl_protocol (opts, NOPOLL_METHOD_SSLV23);         // 2
//    nopoll_conn_opts_set_ssl_protocol (opts, NOPOLL_METHOD_TLSV1);          // 4
//    nopoll_conn_opts_set_ssl_protocol (opts, NOPOLL_METHOD_TLSV1_2);  // 6
      nopoll_conn_opts_set_ssl_protocol (opts, 6);

      //nopoll_conn_opts_ssl_peer_verify (opts, nopoll_true);

      tpp_logerror( "Certificados");

      nopoll_conn_opts_set_ssl_certs (opts,
                              // certificate
                              "client.pem",
                              // private key
                              "client.pem",
                              NULL,
                              // ca certificate
                              "ca.crt");

      tpp_logerror( "context creator");

      nopoll_ctx_set_ssl_context_creator (ctx, ryd_ssl_context_creator, NULL);

      SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv3);

      tpp_logerror( "antes tls_new");

      conn = nopoll_conn_tls_new (ctx, opts, "185.201.145.235", aux_port, url_pm, "/ryd", NULL, aux_conn2);
      //conn = nopoll_conn_tls_new (ctx, opts, url_pm, aux_port, aux_conn1, aux_conn2, NULL, NULL);

      tpp_logerror( "Miramos si OK");

      if(nopoll_conn_is_tls_on(conn))
      {
            tpp_logerror( "Habilitado el TLS");
      }else
      {
            tpp_logerror( "No habilitado el TLS");
      }

      tpp_logerror( "antes conn ok");
      
      // check connection
      if (! nopoll_conn_is_ok (conn))
      {
            tpp_logerror ("ERROR: failed to start connection..");
            return -1;
      }

      tpp_logerror ("Comprobar conexion 1...");
      //if (!nopoll_conn_is_ready (conn) )
      if (!nopoll_conn_wait_until_connection_ready (conn, 30) )
      {
                          // here i check if the connection is ready
            tpp_logerror ("Conn_WS ERROR 2: (conn=%p, conn->session=%d, NOPOLL_INVALID_SOCKET=%d, errno=%d, strerr=%s)",
                        conn, (int) nopoll_conn_socket (conn), (int) NOPOLL_INVALID_SOCKET, errno, strerror (errno));
            //return nopoll_false;
            return -1;
            }       

      tpp_logerror ("INFO1: conn=%p, conn-id=%d, nopoll_conn_is_ok (%p)=%d, nopoll_conn_is_ready (%p)=%d...sending content",
                        conn, nopoll_conn_get_id (conn), conn,
                        nopoll_conn_is_ok (conn), conn,
                        nopoll_conn_is_ready (conn));

      return 0;
}

Muchísimas gracias y un saludo.



[https://avaloninformatica.com/email-signature/Avalon.gif]<https://www.avaloninformatica.com/>
Javier Mora Alonso

Analista / Programador

Desarrollo





________________________________
De: christian.pena at aspl.es <christian.pena at aspl.es>
Enviado: miércoles, 8 de febrero de 2023 17:51
Para: Soporte | ASPL <soporte at aspl.es>; nopoll-owner at lists.aspl.es <nopoll-owner at lists.aspl.es>; Javier Mora Alonso <jmora at AVALONINFORMATICA.COM>
Cc: soporte at aspl.es <soporte at aspl.es>
Asunto: Re: Duda Nopoll SSL/TLS con certificados Cliente


REMITENTE EXTERNO. PRECAUCION con enlaces y adjuntos.

Buenas Javier,

Sin excluir que puede haber otros errores, el principal problema que vemos
está en la siguiente frase:

Los certificados client.pem son los que nos ha proporcionado el servidor, el root.pem me he basado en sus ejemplos nopoll de TLS.
En concreto, no puedes utilizar una ca (bundle) de un lado y certificados de otro.

Todo tiene que estar alineado para que la cadena de confianza funcione.

Revisad para que el certificado client.pem (tengan private y certificado público alineado),
y que ambos estén firmados por una certificadora que reconozca el equipo desde donde
está siendo lanzada la conexión, y si no es posible, en ese caso, podéis pasar el ca certificate,
pero no uno cualquiera: tiene que ser el certificado raíz que haya sido usado para generar
ese client.pem que estáis pasando en la llamada.

En definitiva, si ese "client.pem" os lo ha proporcionado el servidor, entonces también
os tiene que proporcionar el root.pem.

Para ejemplificar todo esto, tienes en el siguiente enlace [1] un script que se usa para generar
una ca (root.pem), de ella derivamos un server.pem y un client.pem (todo ello alineado entre
sí mismo y con el root.pem), para poder ejecutar el test de regression: test_21 [2]:

[1] https://github.com/ASPLes/nopoll/blob/master/test/gen-certificates-test-21.sh
[2] https://github.com/ASPLes/nopoll/blob/master/test/nopoll-regression-client.c

Un saludo,






[https://avaloninformatica.com/email-signature/Avalon.gif]<https://www.avaloninformatica.com/>
Javier Mora Alonso

Analista / Programador

Desarrollo



[https://avaloninformatica.com/email-signature/phone-icon.png]  +34 916 347 750<tel:+34916347750>
[https://avaloninformatica.com/email-signature/email-icon.png]  jmora at avaloninformatica.com<mailto:jmora at avaloninformatica.com><mailto:info at avaloninformatica.com>
[https://avaloninformatica.com/email-signature/link-icon.png]   www.avaloninformatica.com<https://avaloninformatica.com/>
[https://avaloninformatica.com/email-signature/linkedin.png]    LinkedIN<https://www.linkedin.com/company/avalon-informatica-y-servicios-slu/>
[https://avaloninformatica.com/email-signature/address-icon.png]        P. Empresarial El Carralero, 4. 28222 Majadahonda. Madrid (SPAIN)<https://goo.gl/maps/Z8bPMxE1q5PJ9Tvk8>

Este mensaje y cualquier archivo adjunto está destinado únicamente a quien se dirige y es confidencial. Si usted ha recibido este mensaje por error, comuníqueselo al remitente y bórrelo inmediatamente. La utilización, revelación y/o reproducción del mensaje puede constituir un delito.

PROTECCIÓN DE DATOS – Responsable: AVALON INFORMÁTICA Y SERVICIOS, S.L.U. Finalidad. Envío de información, respuesta a consultas y contactos genéricos, mientras dure nuestra relación y tengamos su consentimiento. Destinatarios. No se cederán datos a terceros salvo obligación legal. Derechos. Puede ejercer los derechos de acceso, rectificación, supresión y oposición, limitar el tratamiento de sus datos, o directamente oponerse al tratamiento, o ejercer el derecho a la portabilidad de los mismos. Todo ello, mediante escrito, acompañado de copia de documento oficial que le identifique, dirigido al RESPONSABLE. En caso de disconformidad con el tratamiento, también tiene derecho a presentar una reclamación ante la Agencia Española de Protección de Datos. También podrá oponerse a nuestros envíos de comunicaciones comerciales (Art.21.2 de la LSSI) a través de la siguiente dirección de correo electrónico: info at avaloninformatica.com.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.aspl.es/pipermail/nopoll/attachments/20230221/7bc94dc1/attachment-0001.html>


More information about the noPoll mailing list