Goalist Developers Blog

AWS RDSにJDBCでSSL接続する

こんにちは。ゴーリスト開発の飯尾です。
AWS RDS for MySQLに、SSL証明書を使ってJDBC接続する時に行ったことをまとめました。

前提

  • RDSのセキュリティグループで自IPからのアクセスを許可しておく
  • 2017年10月の試行メモ

手順

1. 証明書をゲットだぜ

$ wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem

2. 証明書をjksファイルに変換する

YOUR_JKS_PASSWORDのところはお好みで変えてください。

Macなのでこう

$ split -p "-----BEGIN CERTIFICATE-----" rds-combined-ca-bundle.pem individual-
$ find . -iname 'individual*' -exec keytool -import -file {} -alias {} -storepass YOUR_JKS_PASSWORD -keystore amazon.jks \;

Linuxならcsplitで分割して同様にひとつのjksファイルにまとめる。

このへんを見ました。
Using Java to establish a secure connection to MySQL Amazon RDS (SSL/TLS) - Stack Overflow

3. 作成したjksファイルを任意のフォルダに移動

# mkdir /opt/jks
# mv amazon.jks /opt/jks

4. 接続URLに各パラメータを追加する

  • useSSL=true
  • requireSSL=true
  • verifyServerCertificate=true
  • trustCertificateKeyStoreUrl=file:///opt/jks/amazon.jks # 作成したjksファイルのパス
  • trustCertificateKeyStoreType=JKS
  • trustCertificateKeyStorePassword=YOUR_JKS_PASSWORD # jksファイル作成時に設定したパスワード

こんなかんじになりました

jdbc:mysql://YOUR_SERVER/YOUR_DB?characterEncoding=UTF8&useSSL=true&requireSSL=true&verifyServerCertificate=true&trustCertificateKeyStoreUrl=file:///opt/jks/amazon.jks&trustCertificateKeyStoreType=JKS&trustCertificateKeyStorePassword=YOUR_JKS_PASSWORD

5. あとはいつものとおりDriverManager.getConnection

参考URL

qiita.com

blog.cles.jp

stackoverflow.com

MySQL :: MySQL Connector/J 5.1 Developer Guide :: 5.5 Connecting Securely Using SSL

JKS 形式のキーストアの作成 (SSL をサポートする Java CAPS の構成)

EC2上のTomcatからRDSにSSL接続する方法 | infoScoop開発者ブログ

ひとこと

真面目さがアフレデル〜