Zum Inhalt springen
ecdsa.com
OpenSSL (server side, mutual TLS)OpenSSL-CLI

Fehlermeldung

SSL routines:tls_process_client_certificate:peer did not return a certificate

Auch ausgegeben als

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

OpenSSL 3.x protokolliert „error:0A0000C7:SSL routines:tls_process_client_certificate:peer did not return a certificate:<source>“. nginx nutzt diesen Weg nicht: Mit ssl_verify_client on schließt es den Handshake ab und gibt stattdessen HTTP 400 „No required SSL certificate was sent“ zurück.

OpenSSL (server side, mutual TLS) — SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE

Was der Fehler bedeutet

Das ist der serverseitige Eintrag eines fehlgeschlagenen Handshakes bei Mutual TLS: Der Server hat ein Client-Zertifikat verlangt (SSL_VERIFY_FAIL_IF_NO_PEER_CERT), und der Client hat keines gesendet. Der Server bricht dann mit einem Alert ab (certificate_required bei TLS 1.3, handshake_failure bei TLS 1.2), den der Client als Alert-Fehler sieht.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Client-Zertifikat konfigurieren

    Gib dem Client sein Zertifikat und seinen Schlüssel und teste mit 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.

    Zertifikat dort optional machen, wo das nötig ist

    Server, die auch Health Checks oder öffentliche Pfade bedienen, können Zertifikate optional anfordern und sie pro Location erzwingen.

    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.

    Angekündigte CA-Namen prüfen

    Der Aussteller der Client-Zertifikate muss in der Liste stehen, die der Server sendet, sonst bieten Clients, die Zertifikate automatisch auswählen, keines an.

    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'

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen