Ho più domini (diciamo abc.com e xyz.org) con certificato diverso. È possibile utilizzare la chiave e il certificato in base al nome dell'host senza andare in basso a livello basso e in Rete. Usando semplicemente http.ListenAndServeTLS (...) o simili? Fondamentalmente come quello che nginx fa.È possibile ospitare più TLS di dominio in golang con net/http?
7
A
risposta
13
BuildNameToCertificate() annuncerà il nome host dal certificato. Se nessuno corrisponde alle informazioni SNI, serve [0]. https://golang.org/src/crypto/tls/common.go?s=18204:18245#L762
package main
import (
"crypto/tls"
"net/http"
"time"
"log"
)
func myHandler(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("tls"))
}
func main() {
t := log.Logger{}
var err error
tlsConfig := &tls.Config{}
tlsConfig.Certificates = make([]tls.Certificate, 3)
// go http server treats the 0'th key as a default fallback key
tlsConfig.Certificates[0], err = tls.LoadX509KeyPair("test0.pem", "key.pem")
if err != nil {
t.Fatal(err)
}
tlsConfig.Certificates[1], err = tls.LoadX509KeyPair("test1.pem", "key.pem")
if err != nil {
t.Fatal(err)
}
tlsConfig.Certificates[2], err = tls.LoadX509KeyPair("test2.pem", "key.pem")
if err != nil {
t.Fatal(err)
}
tlsConfig.BuildNameToCertificate()
http.HandleFunc("/", myHandler)
server := &http.Server{
ReadTimeout: 10 * time.Second,
WriteTimeout: 10 * time.Second,
MaxHeaderBytes: 1 << 20,
TLSConfig: tlsConfig,
}
listener, err := tls.Listen("tcp", ":8443", tlsConfig)
if err != nil {
t.Fatal(err)
}
log.Fatal(server.Serve(listener))
}
Problemi correlati
- 1. È possibile ospitare MongoDB in-process?
- 2. È possibile ospitare il CLR in un programma C?
- 3. Come ospitare più applicazioni per flask in un singolo dominio ospitato su nginx?
- 4. È possibile utilizzare Golang mobile con React-Native?
- 5. ospitare più pagine su nodejs
- 6. È possibile ospitare file R Markdown interattivi su Github Pages?
- 7. È possibile utilizzare una dll in C# in un'applicazione golang
- 8. È possibile ospitare un sito django su pagine github?
- 9. CONCAT più sezioni in golang
- 10. È possibile utilizzare SO_REUSEPORT su socket di dominio Unix?
- 11. HttpClient che supporta più protocolli TLS
- 12. Non è possibile distribuire l'applicazione GOLang di esempio per Heroku
- 13. È possibile csv con più schede/fogli?
- 14. È possibile ospitare un modulo di Microsoft Access all'interno di un modulo Windows .Net?
- 15. È possibile ospitare il DLR .Net in una sandbox "a prova di idiota"?
- 16. TLS con socket server php
- 17. semplice PHP con Firebase ospitare
- 18. È possibile che un nome di dominio abbia più indirizzi IP corrispondenti?
- 19. errore di dominio = Codice AVFoundationErrorDomain = -11.814 "Non è possibile registrare"
- 20. Configurazione di entrambe le associazioni WebHTTP e NetHTTP su SSL in WCF su Azure
- 21. Posso ospitare il frontend Angular2 e il backend Golang in un server
- 22. Come funzionano i pacchetti con più file in golang?
- 23. server http golang, non è possibile ottenere il valore postale
- 24. È possibile creare più app ospitate su Chrome per lo stesso dominio?
- 25. Golang: come ordinare la struct con più parametri di ordinamento?
- 26. Istruzione switch con più espressioni costanti in C#. È possibile?
- 27. IMAP + TLS/SSL con sinapsi?
- 28. È questo casting in golang?
- 29. È possibile multiplexare più canali in uno?
- 30. È possibile eseguire più importazioni di classe con ES6/Babel?
server non dispone di alcun metodo StartTLS! – Ostad
Corretto con un esempio funzionante. Questo esempio più completo crea correttamente il listener e avvia il server. – foo
Come dovrei aggiungere il mio router qui? – Saransh