Saltar al contenido
ecdsa.com
OpenSSL (server side, mutual TLS)CLI de OpenSSL

Mensaje de error

SSL routines:tls_process_client_certificate:peer did not return a certificate

También se muestra como

  • error:0A0000C7:SSL routines::peer did not return a certificate

OpenSSL 3.x registra «error:0A0000C7:SSL routines:tls_process_client_certificate:peer did not return a certificate:<source>». nginx no usa esta vía: con ssl_verify_client on, completa el handshake y, en su lugar, devuelve HTTP 400 «No required SSL certificate was sent».

OpenSSL (server side, mutual TLS) — SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE

Qué significa

Este es el registro del lado del servidor de un handshake de TLS mutuo fallido: el servidor exigía un certificado de cliente (SSL_VERIFY_FAIL_IF_NO_PEER_CERT) y el cliente no envió ninguno. Después, el servidor aborta con una alerta (certificate_required en TLS 1.3, handshake_failure en TLS 1.2), que el cliente ve como un error de alerta.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Configurar el certificado de cliente

    Da al cliente su certificado y su clave, y prueba con curl --cert/--key.

    bash
    # Test from the client side with a certificate
    curl --cert client.pem --key client.key https://mtls.example.com/
  2. 2.

    Hacer opcional el certificado donde haga falta

    Los servidores que también atienden solicitudes de comprobación de estado o rutas públicas pueden solicitar los certificados de forma opcional y exigirlos por ruta (location).

    text
    # nginx: request but do not require a certificate on paths that must stay open (health checks)
    ssl_verify_client optional;
    location /internal/ {
        if ($ssl_client_verify != SUCCESS) { return 403; }
    }
  3. 3.

    Comprobar los nombres de CA anunciados

    El emisor de los certificados de cliente debe estar en la lista que envía el servidor; de lo contrario, los clientes que eligen los certificados automáticamente no ofrecerán ninguno.

    bash
    # The CA list the server advertises must include the issuer of the client certificates
    openssl s_client -connect mtls.example.com:443 -servername mtls.example.com </dev/null 2>/dev/null \
      | sed -n '/Acceptable client certificate CA names/,/^Requested/p'

Errores relacionados

Explorar toda la base de datos de errores de firma