Go Crea un server HTTPS


Esempio

Genera un certificato

Per eseguire un server HTTPS, è necessario un certificato. La generazione di un certificato autofirmato con openssl viene eseguita eseguendo questo comando:

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

I parametri sono:

  • req Usa lo strumento di richiesta del certificato
  • x509 Crea un certificato autofirmato
  • newkey rsa:4096 Crea una nuova chiave e certificato utilizzando gli algoritmi RSA con una lunghezza della chiave di 4096 bit
  • sha256 Forza gli algoritmi di hashing SHA256 che i principali browser considerano sicuri (nell'anno 2017)
  • nodes Disabilita la protezione con password per la chiave privata. Senza questo parametro, il server ha dovuto chiederti la password ogni volta che si avvia.
  • keyout Nomi il file in cui scrivere la chiave
  • out Nomi il file in cui scrivere il certificato
  • subj Definisce il nome di dominio per il quale questo certificato è valido
  • days Fow quanti giorni dovrebbe essere valido questo certificato? 3650 sono ca. 10 anni.

Nota: è possibile utilizzare un certificato autofirmato, ad esempio per progetti interni, debug, test, ecc. Qualsiasi browser esterno menzionerà che questo certificato non è sicuro. Per evitare ciò, il certificato deve essere firmato da un'autorità di certificazione. Per lo più, questo non è disponibile gratuitamente. Un'eccezione è il movimento "Let's Encrypt": https://letsencrypt.org

Il codice Go necessario

È possibile gestire configurare TLS per il server con il seguente codice. cert.pem e key.pem sono il certificato e la chiave SSL, che sono stati generati con il comando precedente.

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))
}