LoginSignup
1
0

More than 3 years have passed since last update.

【2020年3月5日まで】RDS証明書を更新する for java

Last updated at Posted at 2020-01-18

プロローグ

新しい SSL/TLS 証明書を使用して MySQL DB インスタンスに接続するようにアプリケーションを更新

2020年3月5日までにRDSのcaを更新してくださいという話。
手順通りやれば問題ないのだが、いくつかハマりポイントがあったので記事にした。 猛烈にハマったので記事にした。

前提

・java
・tomcat
・mysql
・証明書はJKS形式
・クライアントの証明書を先に更新し、mysqlの証明書は後から更新
(同時の場合は、ダウンロードする証明書が異なる)

手順

1.証明書の取得

先にクライアントを更新するので、2015,2019のバンドル版をダウンロード 2015と2019の証明書をダウンロード

場所は現在と同じでよいかと。

$ cd /etc/pki/java
$ wget https://s3.amazonaws.com/rds-downloads/rds-ca-2019-root.pem
$ wget https://s3.amazonaws.com/rds-downloads/rds-ca-2015-root.pem
$ wget https://s3.amazonaws.com/rds-downloads/rds-ca-2019-ap-northeast-1.pem
$ wget https://s3.amazonaws.com/rds-downloads/rds-ca-2015-ap-northeast-1.pem

--2020-01-22 21:19:38--  https://s3.amazonaws.com/rds-downloads/rds-ca-2019-root.pem
s3.amazonaws.com (s3.amazonaws.com) をDNSに問いあわせています... 52.216.139.61
s3.amazonaws.com (s3.amazonaws.com)|52.216.139.61|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 1456 (1.4K) [binary/octet-stream]
`rds-ca-2019-root.pem' に保存中

100%[==========================================================================================================================================>] 1,456       --.-K/s 時間 0s

2020-01-22 21:19:40 (12.8 MB/s) - `rds-ca-2019-root.pem' へ保存完了 [1456/1456]

[root@letsnote java]#  wget https://s3.amazonaws.com/rds-downloads/rds-ca-2015-root.pem
--2020-01-22 21:19:40--  https://s3.amazonaws.com/rds-downloads/rds-ca-2015-root.pem
s3.amazonaws.com (s3.amazonaws.com) をDNSに問いあわせています... 52.216.139.61
s3.amazonaws.com (s3.amazonaws.com)|52.216.139.61|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 1432 (1.4K) [binary/octet-stream]
`rds-ca-2015-root.pem' に保存中

100%[==========================================================================================================================================>] 1,432       --.-K/s 時間 0s

2020-01-22 21:19:41 (13.0 MB/s) - `rds-ca-2015-root.pem' へ保存完了 [1432/1432]

[root@letsnote java]#  wget https://s3.amazonaws.com/rds-downloads/rds-ca-2019-ap-northeast-1.pem
--2020-01-22 21:19:41--  https://s3.amazonaws.com/rds-downloads/rds-ca-2019-ap-northeast-1.pem
s3.amazonaws.com (s3.amazonaws.com) をDNSに問いあわせています... 52.216.139.61
s3.amazonaws.com (s3.amazonaws.com)|52.216.139.61|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 1464 (1.4K) [binary/octet-stream]
`rds-ca-2019-ap-northeast-1.pem' に保存中

100%[==========================================================================================================================================>] 1,464       --.-K/s 時間 0s

2020-01-22 21:19:42 (13.3 MB/s) - `rds-ca-2019-ap-northeast-1.pem' へ保存完了 [1464/1464]

[root@letsnote java]#  wget https://s3.amazonaws.com/rds-downloads/rds-ca-2015-ap-northeast-1.pem
--2020-01-22 21:19:42--  https://s3.amazonaws.com/rds-downloads/rds-ca-2015-ap-northeast-1.pem
s3.amazonaws.com (s3.amazonaws.com) をDNSに問いあわせています... 52.216.139.61
s3.amazonaws.com (s3.amazonaws.com)|52.216.139.61|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 1448 (1.4K) [binary/octet-stream]
`rds-ca-2015-ap-northeast-1.pem' に保存中

100%[==========================================================================================================================================>] 1,448       --.-K/s 時間 0s

2020-01-22 21:19:43 (10.0 MB/s) - `rds-ca-2015-ap-northeast-1.pem' へ保存完了 [1448/1448]

クライアントとサーバを同時に更新する場合は、SSL/TLS を使用した DB インスタンスへの接続の暗号化 から、2019バージョンにする。東京リージョンの場合は、rds-ca-2019-ap-northeast-1.pem

2.証明書の変換

pemをjksに変換する
pem->der、der->jksの2ステップを踏む必要がある
jksに変換するとき、現在の証明書と異なるファイル名にすること
パスワードは現在と同じで構わない。証明書アクセス用なので、DBのパスワードとは無関係。

$ cd /etc/pki/java
$ openssl x509 -outform der -in ./rds-ca-2019-root.pem -out ./rds-ca-2019-root.der
$ openssl x509 -outform der -in ./rds-ca-2015-root.pem -out ./rds-ca-2015-root.der
$ openssl x509 -outform der -in ./rds-ca-2019-ap-northeast-1.pem -out ./rds-ca-2019-ap-northeast-1.der
$ openssl x509 -outform der -in ./rds-ca-2015-ap-northeast-1.pem -out ./rds-ca-2015-ap-northeast-1.der
$ ll

lrwxrwxrwx. 1 root root   40  6月  9  2019 cacerts -> /etc/pki/ca-trust/extracted/java/cacerts
-rw-r--r--  1 root root 1029  1月 22 21:23 rds-ca-2015-ap-northeast-1.der
-rw-r--r--  1 root root 1448  3月  7  2015 rds-ca-2015-ap-northeast-1.pem
-rw-r--r--  1 root root 1016  1月 22 21:23 rds-ca-2015-root.der
-rw-r--r--  1 root root 1432  3月  7  2015 rds-ca-2015-root.pem
-rw-r--r--  1 root root 1040  1月 22 21:23 rds-ca-2019-ap-northeast-1.der
-rw-r--r--  1 root root 1464  9月 19 02:07 rds-ca-2019-ap-northeast-1.pem
-rw-r--r--  1 root root 1034  1月 22 21:23 rds-ca-2019-root.der
-rw-r--r--  1 root root 1456  9月  5 02:53 rds-ca-2019-root.pem
[root@letsnote java]#

$ keytool -import -file ./rds-ca-2019-root.der -destkeystore ./rds-combined-ca-bundle-2019.jks -deststoretype jks -alias rds_root

キーストアのパスワードを入力してください:
キーストアのパスワードが短すぎます - 6文字以上にしてください
キーストアのパスワードを入力してください:
新規パスワードを再入力してください:
所有者: CN=Amazon RDS Root 2019 CA, OU=Amazon RDS, O="Amazon Web Services, Inc.", ST=Washington, L=Seattle, C=US
発行者: CN=Amazon RDS Root 2019 CA, OU=Amazon RDS, O="Amazon Web Services, Inc.", ST=Washington, L=Seattle, C=US
シリアル番号: c73467369250ae75
有効期間の開始日: Fri Aug 23 02:08:50 JST 2019 終了日: Fri Aug 23 02:08:50 JST 2024
証明書のフィンガプリント:
         MD5:  66:EC:63:BB:25:C4:A5:34:82:C6:C0:18:2E:88:9F:0D
         SHA1: D4:0D:DB:29:E3:75:0D:FF:A6:71:C3:14:0B:BF:5F:47:8D:1C:80:96
         SHA256: F2:54:C7:D5:E9:23:B5:B7:51:0C:D7:9E:F7:77:7C:1C:A7:E6:4A:3C:97:22:E4:0D:64:54:78:FC:70:AA:D0:08
署名アルゴリズム名: SHA256withRSA
サブジェクト公開鍵アルゴリズム: 2048ビットRSA鍵
バージョン: 3

拡張:

#1: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: 73 5F 60 D8 BC CB 03 98   F4 2B 17 34 2E 36 5A A6  s_`......+.4.6Z.
0010: 60 FF BC 1F                                        `...
]
]

#2: ObjectId: 2.5.29.19 Criticality=true
BasicConstraints:[
  CA:true
  PathLen:2147483647
]

#3: ObjectId: 2.5.29.15 Criticality=true
KeyUsage [
  Key_CertSign
  Crl_Sign
]

#4: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 73 5F 60 D8 BC CB 03 98   F4 2B 17 34 2E 36 5A A6  s_`......+.4.6Z.
0010: 60 FF BC 1F                                        `...
]
]

この証明書を信頼しますか。 [いいえ]:  はい
証明書がキーストアに追加されました

$ keytool -import -file ./rds-ca-2015-root.der -destkeystore ./rds-combined-ca-bundle-2019.jks -deststoretype jks -alias rds_root_2015
$ keytool -import -file ./rds-ca-2019-ap-northeast-1.der -destkeystore ./rds-combined-ca-bundle-2019.jks -deststoretype jks -alias rds_ap-northeast-1
$ keytool -import -file ./rds-ca-2015-ap-northeast-1.der -destkeystore ./rds-combined-ca-bundle-2019.jks -deststoretype jks -alias rds_ap-northeast-1_2015

$ ll

-rw-r--r--  1 root root 1029  1月 22 21:23 rds-ca-2015-ap-northeast-1.der
-rw-r--r--  1 root root 1448  3月  7  2015 rds-ca-2015-ap-northeast-1.pem
-rw-r--r--  1 root root 1016  1月 22 21:23 rds-ca-2015-root.der
-rw-r--r--  1 root root 1432  3月  7  2015 rds-ca-2015-root.pem
-rw-r--r--  1 root root 1040  1月 22 21:23 rds-ca-2019-ap-northeast-1.der
-rw-r--r--  1 root root 1464  9月 19 02:07 rds-ca-2019-ap-northeast-1.pem
-rw-r--r--  1 root root 1034  1月 22 21:23 rds-ca-2019-root.der
-rw-r--r--  1 root root 1456  9月  5 02:53 rds-ca-2019-root.pem
-rw-r--r--  1 root root 4313  1月 22 21:26 rds-combined-ca-bundle-2019.jks

$ keytool -v -list -keystore  ./rds-combined-ca-bundle-2019.jks

キーストアのパスワードを入力してください:
キーストアのタイプ: jks
キーストア・プロバイダ: SUN

キーストアには4エントリが含まれます

別名: rds_root_2015
作成日: 2020/01/22
エントリ・タイプ: trustedCertEntry

所有者: CN=Amazon RDS Root CA, OU=Amazon RDS, O="Amazon Web Services, Inc.", L=Seattle, ST=Washington, C=US
発行者: CN=Amazon RDS Root CA, OU=Amazon RDS, O="Amazon Web Services, Inc.", L=Seattle, ST=Washington, C=US
シリアル番号: 42
有効期間の開始日: Thu Feb 05 18:11:31 JST 2015 終了日: Thu Mar 05 18:11:31 JST 2020
証明書のフィンガプリント:
         MD5:  CF:C1:A2:0D:A1:C1:B1:3C:12:0B:C1:5A:E5:33:73:EF
         SHA1: E8:11:88:56:E7:A7:CE:3E:5E:DC:9A:31:25:1B:93:AC:DC:43:CE:B0
         SHA256: AF:EB:B8:40:BE:0C:1A:F6:5E:63:E0:CB:D7:9C:CE:35:65:4B:F6:0F:4E:07:62:54:BB:A9:35:E9:63:6D:53:F7
署名アルゴリズム名: SHA1withRSA
サブジェクト公開鍵アルゴリズム: 2048ビットRSA鍵
バージョン: 3

拡張:

#1: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: 4E 02 EE AC 3E F6 15 C8   4C ED 2C F5 05 C1 8F 9C  N...>...L.,.....
0010: 84 08 49 83                                        ..I.
]
]

#2: ObjectId: 2.5.29.19 Criticality=true
BasicConstraints:[
  CA:true
  PathLen:2147483647
]

#3: ObjectId: 2.5.29.15 Criticality=true
KeyUsage [
  Key_CertSign
  Crl_Sign
]

#4: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 4E 02 EE AC 3E F6 15 C8   4C ED 2C F5 05 C1 8F 9C  N...>...L.,.....
0010: 84 08 49 83                                        ..I.
]
]



*******************************************
*******************************************


別名: rds_ap-northeast-1
作成日: 2020/01/22
エントリ・タイプ: trustedCertEntry

所有者: CN=Amazon RDS ap-northeast-1 2019 CA, OU=Amazon RDS, O="Amazon Web Services, Inc.", L=Seattle, ST=Washington, C=US
発行者: CN=Amazon RDS Root 2019 CA, OU=Amazon RDS, O="Amazon Web Services, Inc.", ST=Washington, L=Seattle, C=US
シリアル番号: 7045
有効期間の開始日: Thu Sep 19 01:56:20 JST 2019 終了日: Fri Aug 23 02:08:50 JST 2024
証明書のフィンガプリント:
         MD5:  E1:E7:BE:95:BC:D4:C1:F8:BE:8C:44:EE:A1:34:48:0C
         SHA1: 47:A3:F9:20:64:5C:9F:9D:48:8C:7D:E6:0B:86:D6:05:13:00:16:A1
         SHA256: 90:91:AF:2D:FA:F4:ED:88:2A:4A:B3:3B:9B:4E:DD:2A:8C:BA:41:0A:AB:22:04:17:EF:3D:57:61:85:C2:20:ED
署名アルゴリズム名: SHA256withRSA
サブジェクト公開鍵アルゴリズム: 2048ビットRSA鍵
バージョン: 3

拡張:

#1: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: 73 5F 60 D8 BC CB 03 98   F4 2B 17 34 2E 36 5A A6  s_`......+.4.6Z.
0010: 60 FF BC 1F                                        `...
]
]

#2: ObjectId: 2.5.29.19 Criticality=true
BasicConstraints:[
  CA:true
  PathLen:0
]

#3: ObjectId: 2.5.29.15 Criticality=true
KeyUsage [
  Key_CertSign
  Crl_Sign
]

#4: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 2E 6A 0E 4B 59 85 4A 38   FE B2 75 0F C7 80 E0 4B  .j.KY.J8..u....K
0010: 74 A4 2C 56                                        t.,V
]
]



*******************************************
*******************************************


別名: rds_ap-northeast-1_2015
作成日: 2020/01/22
エントリ・タイプ: trustedCertEntry

所有者: CN=Amazon RDS ap-northeast-1 CA, OU=Amazon RDS, O="Amazon Web Services, Inc.", L=Seattle, ST=Washington, C=US
発行者: CN=Amazon RDS Root CA, OU=Amazon RDS, O="Amazon Web Services, Inc.", L=Seattle, ST=Washington, C=US
シリアル番号: 44
有効期間の開始日: Fri Feb 06 07:03:06 JST 2015 終了日: Fri Mar 06 07:03:06 JST 2020
証明書のフィンガプリント:
         MD5:  D0:F8:8E:C5:33:AF:FC:6B:76:92:0F:78:C4:BE:4A:CE
         SHA1: 4B:2D:8A:E0:C1:A3:A9:AF:A7:BB:65:0C:5A:16:8A:39:3C:03:F2:C5
         SHA256: DC:11:19:D5:45:F2:2A:CF:13:B6:6E:29:D9:3F:E8:AC:75:F6:9E:EC:CB:D3:AE:F3:CB:22:EC:A4:FD:77:17:F8
署名アルゴリズム名: SHA1withRSA
サブジェクト公開鍵アルゴリズム: 2048ビットRSA鍵
バージョン: 3

拡張:

#1: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: 4E 02 EE AC 3E F6 15 C8   4C ED 2C F5 05 C1 8F 9C  N...>...L.,.....
0010: 84 08 49 83                                        ..I.
]
]

#2: ObjectId: 2.5.29.19 Criticality=true
BasicConstraints:[
  CA:true
  PathLen:0
]

#3: ObjectId: 2.5.29.15 Criticality=true
KeyUsage [
  Key_CertSign
  Crl_Sign
]

#4: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 88 8A 33 44 3A 9F 52 B8   12 62 F1 B3 76 57 C4 83  ..3D:.R..b..vW..
0010: 5B C0 4C 11                                        [.L.
]
]



*******************************************
*******************************************


別名: rds_root
作成日: 2020/01/22
エントリ・タイプ: trustedCertEntry

所有者: CN=Amazon RDS Root 2019 CA, OU=Amazon RDS, O="Amazon Web Services, Inc.", ST=Washington, L=Seattle, C=US
発行者: CN=Amazon RDS Root 2019 CA, OU=Amazon RDS, O="Amazon Web Services, Inc.", ST=Washington, L=Seattle, C=US
シリアル番号: c73467369250ae75
有効期間の開始日: Fri Aug 23 02:08:50 JST 2019 終了日: Fri Aug 23 02:08:50 JST 2024
証明書のフィンガプリント:
         MD5:  66:EC:63:BB:25:C4:A5:34:82:C6:C0:18:2E:88:9F:0D
         SHA1: D4:0D:DB:29:E3:75:0D:FF:A6:71:C3:14:0B:BF:5F:47:8D:1C:80:96
         SHA256: F2:54:C7:D5:E9:23:B5:B7:51:0C:D7:9E:F7:77:7C:1C:A7:E6:4A:3C:97:22:E4:0D:64:54:78:FC:70:AA:D0:08
署名アルゴリズム名: SHA256withRSA
サブジェクト公開鍵アルゴリズム: 2048ビットRSA鍵
バージョン: 3

拡張:

#1: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: 73 5F 60 D8 BC CB 03 98   F4 2B 17 34 2E 36 5A A6  s_`......+.4.6Z.
0010: 60 FF BC 1F                                        `...
]
]

#2: ObjectId: 2.5.29.19 Criticality=true
BasicConstraints:[
  CA:true
  PathLen:2147483647
]

#3: ObjectId: 2.5.29.15 Criticality=true
KeyUsage [
  Key_CertSign
  Crl_Sign
]

#4: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 73 5F 60 D8 BC CB 03 98   F4 2B 17 34 2E 36 5A A6  s_`......+.4.6Z.
0010: 60 FF BC 1F                                        `...
]
]



*******************************************
*******************************************

keytool -v -list -keystore ./rds-combined-ca-bundle-2019.jks で証明書の一覧が表示されるので、4つ入っていることを確認すること。
有効期間の開始日、終了日も確認できる。

3.context.xmlの更新

更新前にtomcatは停止すること。

urlのtrustCertificateKeyStoreUrl=file:///etc/pki/java/rds-combined-ca-bundle.jksを作成したjksファイル名にする。

context.xml
<Resource name="jdbc/honyaDB" auth="Container"
    type="javax.sql.DataSource"
    username="honya"
    password="honyapasswd"
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://honya.ap-northeast-1.rds.amazonaws.com:3306/honyaDB?useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=true&amp;requireSSL=true&amp;verifyServerCertificate=true&amp;trustCertificateKeyStoreUrl=file:///etc/pki/java/rds-combined-ca-bundle.jks&amp;trustCertificateKeyStoreType=JKS&amp;trustCertificateKeyStorePassword=password"
/>

エピローグ

context.xml を保存した瞬間に反映されしまうので焦った:scream:
(検証環境なので、そうでもないけど)

証明書を同じファイル名にすればcontext.xmlの変更は要らないが、同じファイル名で新旧を管理するとトラブルの元なので、ファイル名は変更することにした。

2019版証明書(rds-ca-2019-ap-northeast-1.pem)で試したら、しっかり動かなかった:sweat_smile:

2.証明書の変換 にて証明書をインストールするところは、バンドル版の証明書を使用してはいけない。
alert-2.gif
最初の一つしかインストールされないからだ。

サーバ側はawsコンソールでポチポチするだけなので、「SSL/TLS 証明書の更新」を参考にしてください。

参考

新しい SSL/TLS 証明書を使用して MariaDB DB インスタンスに接続するようにアプリケーションを更新

SSL/TLS を使用した DB インスタンスへの接続の暗号化

SSL/TLS 証明書の更新

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