1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ecsからrdsにrds proxyを挟まずに直接接続する際のssl/tls証明書について

Posted at

通常はrds proxyを介してRDSに接続を行っていたが、今回はrds proxyを介さずに直接RDSに接続を行った。

その際に、

failed to initialize database, got error tls: failed to verify certificate: x509: certificate signed by unknown authority

が発生した。

これを解決するために以下公式ドキュメントを参照して証明書バンドルをインストールした。

自身のリージョンによる証明書のバンドルをダウンロードし、作業ディレクトリに配置する。

CA証明書を読み込み、カスタムTLS設定に登録を行う。

import (
	"crypto/tls"
	"crypto/x509"
	"fmt"
	"io/ioutil"
	"log"

	"sample/domain"
	"sample/handler"

	mysqlDriver "github.com/go-sql-driver/mysql"
	"github.com/labstack/echo/v4"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

func main() {
	// DSN(Data Source Name)の作成
	dsn := "sample_user:sampleHogeHoge@tcp(XXXXX-instance-1.hogehogehoge.ap-northeast-1.rds.amazonaws.com:3306)/mydb?tls=custom&allowCleartextPasswords=true&parseTime=true&loc=Asia%2FTokyo"

	// CA証明書を読み込む
	rootCertPool := x509.NewCertPool()
	pem, err := ioutil.ReadFile("../ap-northeast-1-bundle.pem") // ダウンロードした証明書のパスに変更
	if err != nil {
		log.Fatal(err)
	}
	if ok := rootCertPool.AppendCertsFromPEM(pem); !ok {
		log.Fatal("Failed to append PEM.")
	}

	// カスタムTLS設定を登録
	err = mysqlDriver.RegisterTLSConfig("custom", &tls.Config{
		RootCAs: rootCertPool,
	})
	if err != nil {
		log.Fatal(err)
	}

	fmt.Println(dsn)

	// データベースに接続
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		panic("データベースへの接続に失敗しました")
	}

	// Userテーブルの自動マイグレーション
	db.AutoMigrate(&domain.User{}, &domain.Article{})

	// Echo インスタンスの作成
	e := NewEchoRouter(db)

	// サーバーの起動
	e.Logger.Fatal(e.Start(":8080"))
}

その後にいつも通りにDB接続する処理を行うことで接続することができた。

DSNについては

tls=true

としていた設定を

tls=custom

と変更することで先ほど行った設定に則って接続を行ってくれる。

(tls=trueの設定の場合、デフォルトの認証局を使用する設定となる)

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?