質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Echo(フレームワーク)

Echoは、Go言語で作られたフレームワーク。非常に軽量で、小~中規模のアプリ構成を想定した仕様になっています。公式ドキュメントが用意されており、初心者でも始めやすい点が特徴です。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

HTTPS

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

5742閲覧

golang echo で https を起動してブラウザからアクセスすると missing server name が発生する

退会済みユーザー

退会済みユーザー

総合スコア0

Echo(フレームワーク)

Echoは、Go言語で作られたフレームワーク。非常に軽量で、小~中規模のアプリ構成を想定した仕様になっています。公式ドキュメントが用意されており、初心者でも始めやすい点が特徴です。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

HTTPS

HTTPS(Hypertext Transfer Protocol Secure)はHypertext Transfer プロトコルとSSL/TLS プロトコルを組み合わせたものです。WebサーバとWebブラウザの間の通信を暗号化させて、通信経路上での盗聴や第三者によるなりすましを防止します。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2018/03/02 02:23

編集2018/03/05 02:30

前提・実現したいこと

AWS EC2 の Amazon Linuz 上で、ワイルドカード証明書を利用して
golang echo で https サーバを起動したいと考えています。
起動は正常に行えているように見えますが、ブラウザよりアクセスするとエラーが発生します。
恐らく証明書周りの設定の問題だと思いますが、echo の技術情報などを確認しても
理解できませんでした。
ご教示いただきたくお願いいたします。

発生している問題・エラーメッセージ

go build -o test main.go でビルドし、
./test をターミナルで実行すると、https は起動していますが、
当該URLにブラウザよりアクセスすると、ターミナルの画面に
acme/autocert: missing server name が出力されます。

____ __ / __/___/ / ___ / _// __/ _ / _ \ /___/\__/_//_/\___/ v3.2.6 High performance, minimalist Go web framework https://echo.labstack.com ____________________________________O/_______ O\ ? https server started on [::]:9443 echo: http: TLS handshake error from xxx.xxx.xxx.xxx:8095: acme/autocert: missing server name echo: http: TLS handshake error from xxx.xxx.xxx.xxx:8097: acme/autocert: missing server name

該当のソースコード

https のソースは golang echo を参考に作成しています。
https://echo.labstack.com/cookbook/auto-tls

package main import ( "net/http" "github.com/labstack/echo" "github.com/labstack/echo/middleware" "golang.org/x/crypto/acme/autocert" ) func main() { e := echo.New() // e.AutoTLSManager.HostPolicy = autocert.HostWhitelist("<DOMAIN>") // Cache certificates e.AutoTLSManager.Cache = autocert.DirCache(".cache") println(e.AutoTLSManager.Cache) e.Use(middleware.Recover()) e.Use(middleware.Logger()) e.GET("/", func(c echo.Context) error { return c.HTML(http.StatusOK, ` <h1>Welcome to Echo!</h1> <h3>TLS certificates automatically installed from Let's Encrypt :)</h3> `) }) e.Logger.Fatal(e.StartAutoTLS(":9443")) }

試したこと

証明書が正しく読めていないと推測しています。
証明書を格納した .cache ディレクトリの置き場所をソースと同じディレクトリにする、
DirCache を絶対パスにするなど試しましたが、エラーの内容は変わりませんでした。

echo ではない以下の方法では、https を起動できることを確認しています

package main import ( "log" "net/http" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Hello world")) }) log.Fatal(http.ListenAndServeTLS(":9443", ".cache/2018_ssl_ca_cert_hogehoge.pem", ".cache/2018_key_hogehoge.pem", nil)) }

AutoTLSManager.Cache の仕様に以下のように書かれているので、
pem形式の SSL証明書、中間証明書、キーをソース置いてある
ディレクトリに .cache ディレクトリを作成して格納しています。

Manager passes the Cache certificates data encoded in PEM, with private/public parts combined in a single Cache.Put call, private key first.

確認した文献: https://github.com/golang/crypto/blob/master/acme/autocert/autocert.go#L92

バージョン情報

$ go version
go version go1.8.1 linux/amd64
$ uname -a
Linux hogehoge 4.9.81-35.56.amzn1.x86_64 #1 SMP Fri Feb 16 00:18:48 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

自己解決

StartAutoTLSではなく、StartTLSを利用して証明書を指定することで起動することで
正常に https が起動できました。
golang echo の http/2 に書いてありました。
https://echo.labstack.com/cookbook/http2

ソースコードは以下のようになります。

package main import ( "net/http" "github.com/labstack/echo" "github.com/labstack/echo/middleware" "golang.org/x/crypto/acme/autocert" ) func main() { e := echo.New() // e.AutoTLSManager.HostPolicy = autocert.HostWhitelist("<DOMAIN>") // Cache certificates // e.AutoTLSManager.Cache = autocert.DirCache(".cache") ←不要 println(e.AutoTLSManager.Cache) e.Use(middleware.Recover()) e.Use(middleware.Logger()) e.GET("/", func(c echo.Context) error { return c.HTML(http.StatusOK, ` <h1>Welcome to Echo!</h1> <h3>TLS certificates automatically installed from Let's Encrypt :)</h3> `) }) e.Logger.Fatal(e.StartTLS(":9443", ".cache/ssl_ca.pem", ".cache/key.pem")) }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

StartAutoTLSではなく、StartTLSを利用して証明書を指定することで起動することで
正常に https が起動できました。
golang echo の http/2 に書いてありました。
https://echo.labstack.com/cookbook/http2

投稿2018/03/05 01:50

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問