Aller au contenu
ecdsa.com
Go crypto/x509Go

Message d’erreur

x509: cannot validate certificate for 127.0.0.1 because it doesn't contain any IP SANs

Également affiché sous la forme

  • tls: failed to verify certificate: x509: cannot validate certificate for 127.0.0.1 because it doesn't contain any IP SANs

L’adresse est celle à laquelle le client s’est connecté. Lorsque le certificat comporte des SAN de type IP, mais pas cette adresse, Go affiche plutôt « x509: certificate is valid for <ips>, not <ip> ». Les connexions TLS ajoutent le préfixe « tls: failed to verify certificate: ».

Go crypto/x509 — HostnameError when the target is an IP address and the certificate has DNS SANs only

Ce que cela signifie

Le client s’est connecté à une adresse IP : Go doit donc trouver cette adresse parmi les entrées SAN de type IP du certificat, mais celui-ci ne contient que des noms DNS. Go ne compare jamais une adresse IP aux noms DNS ni au nom commun (CN). L’adresse figurant dans le message est celle à laquelle votre client s’est connecté.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Garder l’adresse, vérifier le nom

    Renseignez dans tls.Config.ServerName un nom DNS présent dans le certificat. Go vérifie alors ce nom et l’envoie comme SNI tout en se connectant à l’adresse.

    go
    // Dial the address, verify the certificate's DNS name (also sent as SNI)
    transport := &http.Transport{TLSClientConfig: &tls.Config{ServerName: "api.example.com"}}
    client := &http.Client{Transport: transport}
    resp, err := client.Get("https://10.0.0.5:443/healthz")
  2. 2.

    Ajouter l’adresse comme SAN de type IP

    Les AC privées peuvent émettre des certificats avec des entrées IP ; les AC publiques le font rarement.

    bash
    # Or put the address into the certificate as an IP SAN
    openssl req -new -key server.key -out server.csr -subj "/CN=api.example.com" \
      -addext "subjectAltName=DNS:api.example.com,IP:10.0.0.5"
  3. 3.

    Kubernetes : ajouter l’adresse au certificat du serveur d’API

    Passez des SAN supplémentaires lors de kubeadm init (ou régénérez le certificat apiserver avec les nouveaux SAN), puis distribuez un kubeconfig mis à jour.

    bash
    # Kubernetes API server reached by a new IP (load balancer, node address)
    kubeadm init --apiserver-cert-extra-sans=10.0.0.5,k8s.example.com
    openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -ext subjectAltName

Erreurs associées

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