- 投稿日:2020-01-18T21:23:55+09:00
IntelliJでSpringBootのdevtoolsが動かない
- 投稿日:2020-01-18T19:46:49+09:00
JFileChooserで「置き換えますか?」と表示する方法
JFileChooserで、ファイルを置き換えるときに「置き換えますか?」と表示する方法があります。
概要
保存時にJFileChooserのapproveSelection()が呼び出されます。そこをオーバーライドすれば良いのです。
コード
NewFileChooser.javaimport javax.swing.JFileChooser; import javax.swing.JOptionPane; public class NewFileChooser extends JFileChooser { @Override public void approveSelection() { if (getSelectedFile().exists() && getDialogType() == SAVE_DIALOG && JOptionPane.showConfirmDialog(null, "置き換えますか?", "保存", JOptionPane.YES_NO_OPTION) != JOptionPane.YES_OPTION) { return; } super.approveSelection(); } }まとめ
Swingはこのように、機能の一部をオーバライドすることができます。ただ、思わぬバグを生まないように実装には注意しましょう。
- 投稿日:2020-01-18T16:28:57+09:00
【2020年3月5日まで】RDS証明書を更新する for java
プロローグ
新しい SSL/TLS 証明書を使用して MySQL DB インスタンスに接続するようにアプリケーションを更新
2020年3月5日までにRDSのcaを更新してくださいという話。
手順通りやれば問題ないのだが、いくつかハマりポイントがあったので記事にした。前提
・java
・tomcat
・mysql
・証明書はJKS形式
・クライアントの証明書を先に更新し、mysqlの証明書は後から更新
(同時の場合は、ダウンロードする証明書が異なる)手順
1.証明書の取得
先にクライアントを更新するので、2015,2019のバンドル版をダウンロード
場所は現在と同じでよいかと。$ cd /etc/pki/java $ wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem --2020-01-18 15:22:35-- https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem s3.amazonaws.com (s3.amazonaws.com) をDNSに問いあわせています... 52.216.9.165 s3.amazonaws.com (s3.amazonaws.com)|52.216.9.165|:443 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 65484 (64K) [binary/octet-stream] `rds-combined-ca-bundle.pem' に保存中 100%[==========================================================================================================================================>] 65,484 193KB/s 時間 0.3s 2020-01-18 15:22:36 (193 KB/s) - `rds-combined-ca-bundle.pem' へ保存完了 [65484/65484]クライアントとサーバを同時に更新する場合は、SSL/TLS を使用した DB インスタンスへの接続の暗号化 から、2019バージョンにする。東京リージョンの場合は、rds-ca-2019-ap-northeast-1.pem
2.証明書の変換
pemをjksに変換する
pem->der、der->jksの2ステップを踏む必要がある
jksに変換するとき、現在の証明書と異なるファイル名にすることパスワードは現在と同じで構わない。証明書アクセス用なので、DBのパスワードとは無関係。
$ openssl x509 -outform der -in ./rds-combined-ca-bundle.pem -out ./rds-combined-ca-bundle.der $ ll -rw-rw-r-- 1 root root 1016 1月 18 15:22 rds-combined-ca-bundle.der -rw-rw-r-- 1 root root 65484 9月 20 03:27 rds-combined-ca-bundle.pem $ keytool -import -file ./rds-combined-ca-bundle.der -destkeystore ./rds-combined-ca-bundle.jks -deststoretype jks キーストアのパスワードを入力してください: キーストアのパスワードが短すぎます - 6文字以上にしてください キーストアのパスワードを入力してください: 新規パスワードを再入力してください: 所有者: 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. ] ] この証明書を信頼しますか。 [いいえ]: はい 証明書がキーストアに追加されました $ ll -rw-rw-r-- 1 root roor 1016 1月 18 15:22 rds-combined-ca-bundle.der -rw-rw-r-- 1 root root 1078 1月 18 15:23 rds-combined-ca-bundle.jks -rw-rw-r-- 1 root root 65484 9月 20 03:27 rds-combined-ca-bundle.pem3.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&characterEncoding=UTF-8&useSSL=true&requireSSL=true&verifyServerCertificate=true&trustCertificateKeyStoreUrl=file:///etc/pki/java/rds-combined-ca-bundle.jks&trustCertificateKeyStoreType=JKS&trustCertificateKeyStorePassword=password" />エピローグ
context.xml を保存した瞬間に反映されしまうので焦った
(検証環境なので、そうでもないけど)証明書を同じファイル名にすればcontext.xmlの変更は要らないが、同じファイル名で新旧を管理するとトラブルの元なので、ファイル名は変更することにした。
2019版証明書(rds-ca-2019-ap-northeast-1.pem)で試したら、しっかり動かなかった
サーバ側はawsコンソールでポチポチするだけなので、「SSL/TLS 証明書の更新」を参考にしてください。
参考
新しい SSL/TLS 証明書を使用して MariaDB DB インスタンスに接続するようにアプリケーションを更新