Goで書かれたロードバランサで暗号化を設定しようとしていますが、自動セットアップと手動セットアップの両方を試みましたが、常にエラーが発生します。セットアップGo-handshakeエラーで暗号化しましょう
ドメインが私たちのサーバー(Digital Ocean)を正しく指していて、エラーなしでブラウザからサイトを開くこともできます。また、このドメインにはSSLエラーが報告されません。実際には、CLIからサーバー上でGo実行可能ファイルを実行すると、エラーが繰り返し発生することになります。
- 自動(ACME/autocert)セットアップ:
サーバーコードは、私は、サーバーの開始後、初めてブラウザからドメインを見たときに、証明書とキーが作成されている、ということです:
go func() {
log.Printf("Staring HTTP service on %s ...", ":80")
http.HandleFunc("/*", http.HandlerFunc(func (w http.ResponseWriter, r *http.Request) {
http.Redirect(w, r, "https://" + app.Cfg.S_HOST + ":443" + r.RequestURI, http.StatusMovedPermanently)
}))
if err := http.ListenAndServe(":80", nil); err != nil {
errs <- err
}
}()
log.Printf("Staring HTTPS service on %s ...", ":443")
http.HandleFunc("/hello", http.HandlerFunc(func (w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/plain")
w.Write([]byte("This is an example server.\n"))
}))
certManager := autocert.Manager{
Prompt: autocert.AcceptTOS,
HostPolicy: autocert.HostWhitelist(app.Cfg.S_HOST), //your domain here
Cache: autocert.DirCache("certs"), //folder for storing certificates
}
server := &http.Server{
Addr: ":443",
TLSConfig: &tls.Config{
ServerName: app.Cfg.S_HOST,
GetCertificate: certManager.GetCertificate,
},
}
if err := server.ListenAndServeTLS("", ""); err != nil {
print(err.Error())
} //key and cert are comming from Let's Encrypt
私はこれらのエラーを取得:
のhttp:TLS (IP):443 - >(ip):59451:ピアによる接続のリセット
hello.ServerName空:2017/04/01 17:14: 38のhttp:(IP)からのTLSハンドシェイクエラー:58193:ACME/autocert:欠落しているサーバー名
ます。http:45822:ACME/autocert:(IP)からのTLSハンドシェイクエラーに構成されていないホスト
HTTP :(ip)からのTLSハンドシェイクエラー:EOF
次に試しました(正常)手動で証明書を作成し、単にそのコードを使用して、私は何度も何度もエラーが出る:
サーバー・コードは次のとおりです。
go func() {
log.Printf("Staring HTTP service on %s ...", ":80")
http.HandleFunc("/*", http.HandlerFunc(func (w http.ResponseWriter, r *http.Request) {
http.Redirect(w, r, "https://" + app.Cfg.S_HOST + ":443" + r.RequestURI, http.StatusMovedPermanently)
}))
if err := http.ListenAndServe(":80", nil); err != nil {
errs <- err
}
}()
log.Printf("Staring HTTPS service on %s ...", ":443")
http.HandleFunc("/hello", http.HandlerFunc(func (w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/plain")
w.Write([]byte("This is an example server.\n"))
}))
// ssl["cert"] and ssl["key"] are the cert and key path (letsencrypt/live...)
if err := http.ListenAndServeTLS(sslAddr, ssl["cert"], ssl["key"], nil); err != nil {
errs <- err
}
エラー:
HTTP2:サーバー:エラークライアントからの序文の読み取り:10319:偽 挨拶 "POST/HTTP/1.1 \ r \ nホスト:4"
http:TLSハンドシェイクエラーIP):10322:EOF
ます。http:(IP)からのTLSハンドシェイクエラー:13504:TCPを読んで(私のサーバーのIP):443 - >(IP):13504:読み:ピア
- によってリセット接続
HTTP2:9672::サーバー:クライアント(IP)からの序文を読んでエラークライアント序文
を待ってタイムアウトが誰かが私を助けてくださいことはできますか?ありがとう
オープンインターネットにサーバーがある場合は、破損した形式のTLS要求を取得します。あなた自身のクライアントでエラーが発生していますか? – JimB
いいえ、私はクロムからページをリフレッシュしようとしましたが、エラーを引き起こすようではありません...とにかく、多くの場合、5〜20分になります... –
あなたはhttp://stackoverflow.com/a/40494806/1465640のコードを使用してドメイン情報を更新するだけですか?そしてあなたはあなたがポート443でサーバーにアクセスしていることを確信しています – Pylinux