Aller au contenu
ecdsa.com
Go crypto/x509Go

Message d’erreur

x509: certificate is valid for example.com, not api.example.com

Les deux noms sont propres à chaque échec : d’abord les noms que couvre le certificat, puis le nom demandé par votre client.

Go crypto/x509 — HostnameError from VerifyHostname / TLS dials

Ce que cela signifie

La connexion TLS est allée assez loin pour lire le certificat, mais aucun de ses noms alternatifs du sujet (Subject Alternative Names, SAN) ne correspond au nom d’hôte auquel le client s’est connecté. L’erreur indique les deux côtés, si bien que l’écart saute aux yeux : le certificat couvre X, vous avez demandé Y. Notez que la vérification moderne n’utilise que les SAN ; l’ancien champ du nom commun (Common Name) est ignoré.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Réémettre le certificat avec tous les noms réellement utilisés

    Ajoutez tous les noms d’hôte comme SAN lors de l’émission ; examinez la liste actuelle des SAN pour voir ce qui est couvert aujourd’hui.

    bash
    echo | openssl s_client -connect host:443 -servername api.example.com 2>/dev/null \
      | openssl x509 -noout -ext subjectAltName
    # request with SANs:
    openssl req -new -key key.pem -out req.csr \
      -subj "/CN=example.com" -addext "subjectAltName=DNS:example.com,DNS:api.example.com"
  2. 2.

    Se connecter par le nom, ou définir ServerName explicitement

    Lorsque l’adresse réseau doit différer du nom du certificat (VIP, redirection de port, sidecar), indiquez à TLS l’identité que vous attendez, pour que la vérification reste effective.

    go
    conn, err := tls.Dial("tcp", "10.0.0.5:443", &tls.Config{
        ServerName: "api.example.com",   // matched against SANs, sent as SNI
    })

Erreurs associées

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