Aller au contenu
ecdsa.com
Go crypto/tlsGo

Message d’erreur

remote error: tls: bad certificate

Les serveurs Go consignent « http: TLS handshake error from <client>: remote error: tls: bad certificate ». Les clients fondés sur OpenSSL envoient d’autres alertes pour le même refus (unknown_ca en TLS 1.2) : le texte côté serveur dépend donc de la bibliothèque TLS du client.

Go crypto/tls — TLS alert 42 received from the peer; typically logged by a Go server whose certificate a Go client rejected

Ce que cela signifie

Le pair a envoyé l’alerte TLS 42 (bad_certificate). Dans le journal d’un serveur Go (« http: TLS handshake error from …: remote error: tls: bad certificate »), elle signifie qu’un client a refusé le certificat du serveur ; les clients Go envoient cette alerte pour tout échec de vérification (autorité inconnue, expiration, mauvais nom). Côté client Go, elle signifie que le serveur a rejeté le certificat client en TLS mutuel. La raison réelle n’est visible que du côté qui a envoyé l’alerte.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Trouver le client qui refuse et lire son erreur

    L’adresse du client dans le journal vous indique quel service examiner ; son erreur précise l’échec de vérification réel.

    bash
    # The log line names the client; its own error message says why it rejected the certificate
    journalctl -u myservice | grep 'remote error: tls: bad certificate' | grep -oE 'from [0-9a-f.:]+' | sort | uniq -c
  2. 2.

    Servir une chaîne complète et approuvée

    Fournissez au serveur Go un fichier PEM contenant la chaîne complète, émise par une AC à laquelle tous les clients font confiance.

    go
    // Serve the full chain: leaf first, then intermediates, in one PEM file
    log.Fatal(http.ListenAndServeTLS(":443", "fullchain.pem", "server.key", nil))
  3. 3.

    Kubernetes : vérifier le caBundle du webhook

    Le caBundle doit contenir l’AC qui a émis le certificat serveur du webhook ; l’injecteur d’AC de cert-manager les maintient synchronisés.

    bash
    # Kubernetes webhooks: the API server verifies the webhook's certificate with caBundle
    kubectl get validatingwebhookconfiguration my-webhook -o jsonpath='{.webhooks[0].clientConfig.caBundle}' \
      | base64 -d | openssl x509 -noout -subject -enddate

Erreurs associées

Parcourir toute la base de données des erreurs de signature