MySQL Connector/J
(バージョン5.1.45
)とこのAWS RDS
を使用して、MySQL
内のdatabase
Java
とのSSL接続を確立しようとしています証明書はこちら: https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem
しかし、私は次のException
を取得しています:
Java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors
この例外をMySQL Connector/J
のExportControlled.Java
クラスline 297
まで追跡できます:
CertPathValidatorResult result = this.validator.validate(certPath, this.validatorParams);
これはJRE
のようなCertPathValidator
セキュリティクラスに入るので、これ以上先に進むことはできません。
私はMySQL Connector/J
を使用してSSL
マジック全体を実行しているので、私の手は縛られており、何が起こっているのか、またはこれを修正する方法がわかりません。証明書はMySQL Workbench
とIntelli J IDEA Database
で正常に機能するため、現在拒否されている理由はわかりません。
これをどのように修正しますか?
頭痛の種をたくさん食べた後、これを修正しました。トラストストアにはチェーンのすべての証明書が必要です。私は https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem を使用していましたが、これは理論的にはすべての証明書ですが、キーストアファイルにインポートすると、keytool
は最初の証明書以外をすべて無視するため、キーストアにはルート証明書しかなく、実際に必要なルートとAWSリージョン証明書はありません。
現在のところ、すべての証明書をインポートする方法はありません。PKCS7(証明書チェーンをサポート)への変換など、いくつかの方法を試しましたが、keytool
には証明書ごとに1つのエイリアスが必要なので、各証明書をインポートして、エイリアスを1つずつ指定します。
keytool
を呼び出して一度に1つの証明書をロードするプログラムを作成することも、私がそうであるように少し遅延して KeyStore Explorer を使用することもできます。新しいキーストアファイルを作成することを選択し、Examine File
オプションを使用してバンドルされたpem
証明書を開く必要があります。その証明書ごとにimport
を選択すると、選択したものがインポートされます新しいキーストアへの証明書。最後に、キーストアファイルのパスワードを定義して保存するだけです。
AWSは、バンドルだけでなく、個別の証明書を提供するようになりました。バンドルには不要な追加のものが含まれています。 SSLを使用したDBインスタンスへの接続の暗号化 を参照してください。
ルート証明書とリージョンの中間証明書の2つの証明書をダウンロードする必要があります。上記のリンクで述べたように、
すべてのリージョンで機能するルート証明書は https://s3.amazonaws.com/rds-downloads/rds-ca-2019-root.pem からダウンロードできます。
中間の証明書はページのさらに下にあります。データベースインスタンスが配置されているリージョンに適したものを使用する必要があります。
これらの両方を新しいキーストアにインポートするにはkeytoolを使用し、trustCertificateKeyStoreUrl
およびtrustCertificateKeyStorePassword
パラメータを介してそのキーストアを使用するようにMySQLに指示する必要があります。
これらすべてをTomcatで動作させるための追加のタスクがありました。接続URLを介して物事を設定するのが不運でした。機能したのは、接続プールのconnectionProperties
をuseSSL=true;requireSSL=true;verifyServerCertificate=true;trustCertificateKeyStoreUrl=file://[absolute path to keystore file];trustCertificateKeyStorePassword=[keystore password]
に設定することでした。
もう1つの問題は、 MySQLドキュメント が正しくないように見えることです。
次の接続プロパティについて説明します。
clientCertificateKeyStoreUrl=file:path_to_truststore_file
clientCertificateKeyStorePassword=mypassword
正しい接続パラメーターは次のとおりです。
trustCertificateKeyStoreUrl
trustCertificateKeyStorePassword
この影響については、ページの「ユーザーのコメント」セクションに注記があります。
数時間前に5.1.45
に移動すると、まったく同じエラーが発生しました。
5.1.42
で今すぐ試して、問題が解決するかどうかを確認してください。