LoginSignup
17
21

More than 5 years have passed since last update.

golang echoを使い4行でhttps化

Last updated at Posted at 2017-12-09

golangのWAFであるechoを使ってapiサーバーを書いていましたが
https化が恐ろしく簡単だったのでメモ。

こちらを参考に書きました。
https://echo.labstack.com/cookbook/auto-tls

裏側でLet’s Encrypt. と接続してhttps化を行ってくれます。
ドメインは必要なので、ローカル環境では動きません。

sample

server.go
package main

import (
    "golang.org/x/crypto/acme/autocert"

    "os"

    "github.com/labstack/echo"
    "github.com/labstack/echo/middleware"
)

func main() {
    e := echo.New()

    env := os.Getenv("ENV")
    if env == "prod" {
        e.AutoTLSManager.HostPolicy = autocert.HostWhitelist(os.Getenv("HOST"))
        e.AutoTLSManager.Cache = autocert.DirCache("/var/www/certs")
        e.Pre(middleware.HTTPSWWWRedirect())
    }

        //
        // <snip>
        //        

    switch env {
    case "prod":
        e.Logger.Fatal(e.StartAutoTLS(":443"))
    case "dev":
        defaultAddr := ":80"
        e.Logger.Fatal(e.Start(defaultAddr))
    default:
        defaultAddr := ":9000"
        e.Logger.Fatal(e.Start(defaultAddr))
    }
}
e.AutoTLSManager.HostPolicy = autocert.HostWhitelist(os.Getenv("HOST"))
e.AutoTLSManager.Cache = autocert.DirCache("/var/www/certs")
e.Pre(middleware.HTTPSWWWRedirect())

// <snip>

e.Logger.Fatal(e.StartAutoTLS(":443"))

hostとキャッシュとリダイレクトの設定を行う。
そのあと443番でStartAutoTLS()を呼ぶ

僕は、dockerで管理しているのでdocker-compose.ymlをこんな感じにして
環境変数をセットしています。

docker-compose.yml
version: '2.1'

services:
  go-19:
    build: <your-project>
    env_file:
      - ./.env
    volumes:
      - ./<your-project>:/go/src/<your-project>
      - ./<your-project>/certs:/var/www/certs
    command: ./<app-bin>
    ports:
      - "${HTTPS}:${HTTPS}"
      - "80:80"
    tty: true
.env
# Host's portforward settings
HTTPS=443

HOST=localhost
ENV=dev

注意すること

キャッシュの宣言をしないとビルドの度に
Let’s Encryptにリクエストを投げてしまうので
取得制限にひっかかります。(2017/11月現在、一週間に5回まで)

自分のドメインが何回リクエスト投げているか見るにはこちらで
https://crt.sh/

sample

スクリーンショット 2017-12-09 16.01.30.png

17
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
21