Aller au contenu
ecdsa.com
Go net/httpGo

Message d’erreur

http: server gave HTTP response to HTTPS client

Les programmes ajoutent leur propre préfixe : Docker affiche « Error response from daemon: Get \"https://<registry>/v2/\": http: server gave HTTP response to HTTPS client », les programmes Go « Get \"https://…\": http: server gave … ». Lorsque la réponse n’est pas non plus du HTTP, Go indique « tls: first record does not look like a TLS handshake ».

Go net/http — the TLS handshake received a plain HTTP response (also printed by Docker, Helm, Terraform)

Ce que cela signifie

Le client HTTP de Go a lancé un handshake TLS, et le serveur a renvoyé une réponse HTTP en texte clair ; Go reconnaît les octets « HTTP/ » et signale que le serveur parle HTTP, pas HTTPS. Le cas le plus connu est docker pull ou docker login vers un registre auto-hébergé qui fonctionne sans TLS : Docker exige HTTPS pour tout registre qui n’est pas sur une adresse de bouclage ou explicitement marqué comme non sécurisé.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Confirmer que le port parle HTTP en clair

    Une ligne de statut HTTP obtenue via http:// le confirme. Utilisez le point de terminaison TLS (ou http:// là où c’est acceptable).

    bash
    curl -si http://registry.example.com:5000/v2/ | head -1   # answers over plain HTTP?
  2. 2.

    Servir le registre en TLS

    Dotez le registre d’un certificat (ACME public ou AC d’entreprise) et configurez-le, ou placez devant lui un proxy qui assure la terminaison TLS.

    yaml
    # Docker registry (distribution) config.yml: serve TLS
    http:
      addr: :5000
      tls:
        certificate: /certs/registry.example.com.fullchain.pem
        key: /certs/registry.example.com.key
  3. 3.

    En dernier recours : marquer le registre comme non sécurisé (daemon.json)

    L’ajouter à insecure-registries dans /etc/docker/daemon.json (puis redémarrer dockerd) permet à Docker de lui parler en HTTP simple. Les images et les identifiants circulent alors sans chiffrement ni authentification ; ne le faites que sur des réseaux de laboratoire isolés.

    json
    {
      "insecure-registries": ["registry.example.com:5000"]
    }

Erreurs associées

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