Home > Enterprise >  How to route https request before ListenAndServeTLS
How to route https request before ListenAndServeTLS

Time:10-30

Before I know which certificate files to use, I need to check the request Host, how to do that ?

I can't call

http.ListenAndServeTLS(":443", "cerfile", "certkey", mux)

because the cert files and "mux" to use depends on the request host address, which is only available in the handler!

and of course I should only use the 443 port!

Can this be done with http package alone ?

CodePudding user response:

As Burak Serdar comment, you could custom GetCertificate of tls.Config to return the specific certificate by different host.

Sample Code


    mux := http.NewServeMux()
    cfg := &tls.Config{
        GetCertificate: func(info *tls.ClientHelloInfo) (*tls.Certificate, error) {
            // get certificate by info.ServerName

        },
    }
    srv := &http.Server{
        Addr:      ":443",
        Handler:   mux,
        TLSConfig: cfg,
    }
    fmt.Println(srv.ListenAndServeTLS("defaulttls.crt", "defaulttls.key"))

About how to get a certificate by ClientHelloInfo, you could refer to autocert sample codes

  •  Tags:  
  • go
  • Related