web-dev-qa-db-fra.com

Comment configurer Let's Encrypt pour une application serveur Go

J'ai mon propre domaine avec des services Web écrits en Go. J'utilise le serveur Web Go intégré, sans Nginx ou Apache devant.

Je voudrais commencer à servir via HTTPS et j'ai réalisé que Let's Encrypt est sur le point de devenir LA VOIE pour le faire.

Quelqu'un peut-il partager toute la procédure d'installation pour configurer une application Go exécutée sur un serveur Linux?

27
Daniele B

Il s'agit de la configuration automatique minimale d'un serveur HTTPS utilisant les certificats Go et Let's Encrypt que j'ai trouvés:

package main

import (
    "crypto/tls"
    "log"
    "net/http"

    "golang.org/x/crypto/acme/autocert"
)

func main() {
    certManager := autocert.Manager{
        Prompt:     autocert.AcceptTOS,
        HostPolicy: autocert.HostWhitelist("example.com"), //Your domain here
        Cache:      autocert.DirCache("certs"),            //Folder for storing certificates
    }

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

    server := &http.Server{
        Addr: ":https",
        TLSConfig: &tls.Config{
            GetCertificate: certManager.GetCertificate,
        },
    }

    go http.ListenAndServe(":http", certManager.HTTPHandler(nil))

    log.Fatal(server.ListenAndServeTLS("", "")) //Key and cert are coming from Let's Encrypt
}

Plus d'informations sur le package autocert: link

EDIT: Nécessaire pour rendre http disponible en raison de permet de crypter un problème de sécurité , en savoir plus ici . En prime de ce correctif, nous avons maintenant une redirection http -> https. L'ancien exemple continuera de fonctionner si vous avez déjà reçu des certificats dessus, mais il s'arrêtera pour les nouveaux sites.

55
Pylinux

J'ai trouvé une solution très simple, en utilisant le mode autonome .


INSTALLER LE CLIENT CERTBOT (recommandé par Let's Encrypt)

(go to the directory where you want to install the certbot client)
git clone https://github.com/certbot/certbot
cd certbot
./certbot-auto --help`


DÉLIVRER LE CERTIFICAT (PREMIÈRE FOIS)

N.B. cette opération se produit via le port 80, donc si votre application Go écoute sur le port 80, elle doit être désactivée avant d'exécuter cette commande (qui est très rapide à exécuter, d'ailleurs)

./certbot-auto certonly --standalone-supported-challenges http-01 -d www.yourdomain.com

AJOUTER L'ÉCOUTEUR SSL DANS VOTRE CODE GO

http.ListenAndServeTLS(":443", "/etc/letsencrypt/live/www.yourdomain.com/fullchain.pem", "/etc/letsencrypt/live/www.yourdomain.com/privkey.pem", nil)

Terminé!


POUR RENOUVELER LE CERTIFICAT (les certificats expirent après 90 jours)

N.B. Vous pouvez soit l'exécuter manuellement (vous recevrez un e-mail plusieurs jours avant l'expiration du certificat), soit configurer un crontab

si votre application Go n'écoute plus le port 80, votre application Go peut continuer à fonctionner pendant que vous exécutez cette commande:
./certbot-auto renew --standalone

si votre application Go écoute toujours le port 80, vous pouvez spécifier les commandes pour arrêter et redémarrer l'application Go:
./certbot-auto renew --standalone --pre-hook "command to stop Go app" --post-hook "command to start Go app"

pour la documentation complète des commandes Certbot: https://certbot.eff.org/docs/using.html

27
Daniele B