2017-04-01 3 views
2

Goで書かれたロードバランサで暗号化を設定しようとしていますが、自動セットアップと手動セットアップの両方を試みましたが、常にエラーが発生します。セットアップGo-handshakeエラーで暗号化しましょう

ドメインが私たちのサーバー(Digital Ocean)を正しく指していて、エラーなしでブラウザからサイトを開くこともできます。また、このドメインにはSSLエラーが報告されません。実際には、CLIからサーバー上でGo実行可能ファイルを実行すると、エラーが繰り返し発生することになります。

  1. 自動(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 

私はこれらのエラーを取得:

  1. のhttp:TLS (IP):443 - >(ip):59451:ピアによる接続のリセット

  2. hello.ServerName空:2017/04/01 17:14: 38のhttp:(IP)からのTLSハンドシェイクエラー:58193:ACME/autocert:欠落しているサーバー名

  3. ます。http:45822:ACME/autocert:(IP)からのTLSハンドシェイクエラーに構成されていないホスト

  4. 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 
    } 

エラー:

  1. HTTP2:サーバー:エラークライアントからの序文の読み取り:10319:偽 挨拶 "POST/HTTP/1.1 \ r \ nホスト:4"

  2. http:TLSハンドシェイクエラーIP):10322:EOF

  3. ます。http:(IP)からのTLSハンドシェイクエラー:13504:TCPを読んで(私のサーバーのIP):443 - >(IP):13504:読み:ピア

  4. によってリセット接続

    HTTP2:9672::サーバー:クライアント(IP)からの序文を読んでエラークライアント序文

を待ってタイムアウトが誰かが私を助けてくださいことはできますか?ありがとう

+2

オープンインターネットにサーバーがある場合は、破損した形式のTLS要求を取得します。あなた自身のクライアントでエラーが発生していますか? – JimB

+0

いいえ、私はクロムからページをリフレッシュしようとしましたが、エラーを引き起こすようではありません...とにかく、多くの場合、5〜20分になります... –

+0

あなたはhttp://stackoverflow.com/a/40494806/1465640のコードを使用してドメイン情報を更新するだけですか?そしてあなたはあなたがポート443でサーバーにアクセスしていることを確信しています – Pylinux

答えて

0

JimBと他の人がコメントで言ったように、これは悪い要求の結果である可能性があります。 https://www.ssllabs.com/ssltest/を使用してサイトのhttps設定をテストすると、無効なリクエストが記録されます。良好なテストスコアは、ログメッセージが無害であり、安全に無視できるという確信を与えることができます。

また、acme/autocertパッケージも急速に進化しています(2018年1月)。バージョンが最新であることをご確認ください。

関連する問題