Go Créer un serveur HTTPS


Exemple

Générer un certificat

Pour pouvoir exécuter un serveur HTTPS, un certificat est nécessaire. La génération d’un certificat auto-signé avec openssl se fait en exécutant cette commande:

openssl req -x509 -newkey rsa:4096 -sha256 -nodes -keyout key.pem -out cert.pem -subj "/CN=example.com" -days 3650`

Les paramètres sont:

  • req Utiliser l'outil de demande de certificat
  • x509 Crée un certificat auto-signé
  • newkey rsa:4096 Crée une nouvelle clé et un nouveau certificat en utilisant les algorithmes RSA avec une longueur de clé de 4096 bits.
  • sha256 Force les algorithmes de hachage SHA256 que les principaux navigateurs considèrent comme sécurisés (en 2017)
  • nodes Désactive la protection par mot de passe pour la clé privée. Sans ce paramètre, votre serveur doit vous demander le mot de passe à chaque démarrage.
  • keyout le fichier où écrire la clé
  • out Nomme le fichier où écrire le certificat
  • subj Définit le nom de domaine pour lequel ce certificat est valide
  • days Combien de jours faut-il pour que ce certificat soit valide? 3650 sont environ. 10 années.

Remarque: Un certificat auto-signé peut être utilisé, par exemple, pour des projets internes, le débogage, les tests, etc. Tout navigateur sur ce site mentionnera que ce certificat n'est pas sûr. Pour éviter cela, le certificat doit être signé par une autorité de certification. Surtout, ce n'est pas disponible gratuitement. Une exception est le mouvement "Let's Encrypt": https://letsencrypt.org

Le code nécessaire

Vous pouvez gérer la configuration TLS pour le serveur avec le code suivant. cert.pem et key.pem sont votre certificat et votre clé SSL, générés avec la commande ci-dessus.

package main

import (
    "log"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte("Hello, world!"))
    })

    log.Fatal(http.ListenAndServeTLS(":443","cert.pem","key.pem", nil))
}