2016-07-03 2 views
1

Мне интересно, как использовать ssl-сертификат godaddy с сервером GoLang Https.сертификат ssl godaddy's с GoLang

В настоящее время я использую следующий код:

srv := &http.Server{ 
    Addr: httpsPortStr, 
    Handler: n, 
    ReadTimeout: time.Duration(config.CfgIni.ReadTimeout) * time.Second, 
    WriteTimeout: time.Duration(config.CfgIni.WriteTimeout) * time.Second, 
} 
err := srv.ListenAndServeTLS(<CERTIFICATE_FILE>,<PRIVATE_KEY_FILE>) 

Я до сих пор sf_bundle-g2-g1.crt. как добавить его в цепочку сертификатов?

обновление

@ ответ Vonc является очень полезным, я просто не хватает одну вещь. Я использую экземпляр http.Server для изменения параметров ReadTimeout и WriteTimeout. как я могу это сделать с помощью tls?

Мой предыдущий код для этого:

srv := &http.Server{ 
    Addr: httpsPortStr, 
    Handler: n, 
    ReadTimeout: time.Duration(config.CfgIni.ReadTimeout) * time.Second, 
    WriteTimeout: time.Duration(config.CfgIni.WriteTimeout) * time.Second, 
} 
err := srv.ListenAndServeTLS(config.CfgIni.CertificateFile,config.CfgIni.PrivateKeyFile) 

спасибо!

ответ

2

Вы можете увидеть full example here в разделе file-server-go.
Цепь сертификата должен быть загружен в x509.NewCertPool()

cert, err := tls.LoadX509KeyPair("certs/server.pem", "certs/server.key") 
if err != nil { 
    log.Fatalf("server: loadkeys: %s", err) 

} 
certpool := x509.NewCertPool() 
pem, err := ioutil.ReadFile("certs/ca.pem") 
if err != nil { 
    log.Fatalf("Failed to read client certificate authority: %v", err) 
} 
if !certpool.AppendCertsFromPEM(pem) { 
    log.Fatalf("Can't parse client certificate authority") 
} 

config := tls.Config{ 
    Certificates: []tls.Certificate{cert}, 
    ClientAuth: tls.RequireAndVerifyClientCert, 
    ClientCAs: certpool, 
} 
config.Rand = rand.Reader 
service := "0.0.0.0:8000" 
listener, err := tls.Listen("tcp", service, &config) 

В вашем случае, ioutil.ReadFile("sf_bundle-g2-g1.crt").

Я использую http.Server экземпляр для того, чтобы изменить ReadTimeOut и WriteTimeout параметры

server := &http.Server{ 
    Addr:  "0.0.0.0:8000", 
    TLSConfig: tlsConfig, 
    ReadTimeout: time.Duration // maximum duration before timing out read of the request, 
    WriteTimeout: time.Duration // maximum duration before timing out write of the response 
} 

(заменить time.Duration с фактическим временем)

Тогда:

err := server.ListenAndServeTLS(certFile, keyFile string) 
log.Fatal(err) 

Примечание ListenAndServeTLS всегда ret Урны - ошибка, отличная от нуля.

+0

спасибо! только один вопрос, обновленный основной пост – ufk

+0

спасибо. Я могу использовать этот объект tls.Config как параметр TLSConfig, как указано на http://www.bite-code.com/2015/06/25/tls-mutual-auth-in-golang/ – ufk

+0

Большое вам спасибо за ваш ответ , по какой-то причине мой сертификат кажется неполным с помощью ssl verifier. Я открыл новый вопрос. если возможно, посмотрите http://stackoverflow.com/questions/38170775/golang-with-http-ssl-godaddys-certificate-this-servers-certificate-chain-is еще раз! – ufk

Смежные вопросы