このトピックでは、Lindorm ワイドテーブルエンジンで MySQL プロトコルのポート 33060 を使用し、SSL/TLS 暗号化リンクを有効にする方法を説明します。
バージョン要件
ワイドテーブルエンジン >= 2.8.6.14 および SQL バージョン >= 2.9.7.16
適用範囲
このトピックでは、Lindorm ワイドテーブルエンジンで MySQL プロトコルのポート 33060 を使用し、SSL/TLS 暗号化リンクを有効にする方法を説明します。次のシナリオが含まれます。
クライアントがリンクの暗号化のみを必要とする場合:
sslMode=REQUIREDを使用します。クライアントが CA 証明書を使用してサーバー証明書チェーンを検証する必要がある場合:
sslMode=VERIFY_CAを使用し、コンソールからダウンロードした CA 証明書を設定します。JDBC クライアントで CA 証明書による厳密な検証が必要な場合は、接続前に CA 証明書をトラストストアにインポートします。
コンソールでの SSL 暗号化サービスの有効化
前提条件
Lindorm ワイドテーブルエンジンが有効化されていること。
操作手順
Lindorm コンソールにログインします。
ページの左上隅で、インスタンスがデプロイされているリージョンを選択します。
インスタンス一覧 ページで、目的のインスタンスの ID をクリックするか、操作 列の 管理 をクリックします。
インスタンス詳細ページの左側メニューで、 をクリックします。
データリンク SSL セクションで、ステータス: エリアのサービスを有効にします。
SSL 暗号化サービスが有効になるまで待ちます。ページに次の情報が表示されたら、SSL 暗号化サービスは有効になっています。
ステータス::[有効]
SSL 証明書有効期限::ページに表示される証明書の有効期限。例:
2036-06-13 18:02:25SSL 証明書有効性::[有効]
CA 証明書のダウンロード ボタンが表示されます。
クライアントで厳密な検証のために VERIFY_CA を使用する必要がある場合は、CA 証明書のダウンロード をクリックして CA 証明書ファイルを取得してください。
クライアント接続モード
暗号化リンクのみ
クライアントとサーバー間のリンクを暗号化で保護するだけでよい場合は、sslMode=REQUIRED を使用します。このモードでは、クライアントが追加の CA ルート証明書を設定することなく TLS 暗号化が有効になります。
MySQL コマンドの例
mysql --ssl-mode=REQUIRED \ -h <host> \ -P 33060 \ -u <user> \ -p \ -D <database> \ --get-server-public-key詳細な使用法については、「MySQL クライアントを使用した LindormTable への接続と使用」をご参照ください。
JDBC の例
String url = "jdbc:mysql://<host>:33060/<database>" + "?sslMode=REQUIRED" + "&allowPublicKeyRetrieval=true"; Connection connection = DriverManager.getConnection(url, user, password);詳細な使用法については、「Java JDBC インターフェースを使用したアプリケーション開発」をご参照ください。
厳密な証明書チェーンの検証
クライアントが、サーバー証明書が信頼できる CA によって発行されたことを確認する必要がある場合は、sslMode=VERIFY_CA を使用し、コンソールからダウンロードした CA 証明書を --ssl-ca で指定します。
mysql --ssl-mode=VERIFY_CA \
--ssl-ca=/path/to/Lindorm-CA.crt \
-h <host> \
-P 33060 \
-u <user> \
-p \
-D <database> \
--get-server-public-keyクエリ例:
mysql --ssl-mode=VERIFY_CA \
--ssl-ca=/path/to/Lindorm-CA.crt \
-h <host> -P 33060 -u <user> -p -D <database> \
--get-server-public-key \
-e "SELECT 1 AS ok"例の /path/to/Lindorm-CA.crt は、ローカル環境での Lindorm-CA.crt ファイルの実際の絶対パスに置き換えてください。
ok = 1 が返された場合、クライアントは CA 証明書に基づいて SSL ハンドシェイクとクエリを完了したことになります。
VERIFY_IDENTITY モードの説明
VERIFY_IDENTITY は VERIFY_CA をベースに、さらに接続ホスト名がサーバー証明書で宣言されている SAN/CN と一致することを検証します。したがって、このモードを使用するには、クライアントが接続するホストが、証明書で宣言されているドメイン名または IP アドレスと完全に一致する必要があります。
JDBC での厳密な CA 検証
MySQL Connector/J では、一般的にまずコンソールからダウンロードした CA 証明書を Java のトラストストアにインポートし、次に JDBC URL でそのトラストストアを設定します。
トラストストアの生成
keytool -importcert \
-alias lindorm-ca \
-file /path/to/Lindorm-CA.crt \
-keystore /path/to/lindorm-ca.p12 \
-storetype PKCS12 \
-storepass changeit \
-noprompt例の
/path/to/Lindorm-CA.crtは、ローカル環境での証明書ファイルの実際の絶対パスに置き換えてください。例の
/path/to/lindorm-ca.p12は、ローカル環境にファイルを保存する実際の絶対パスに置き換えてください。
JDBC URL
String url = "jdbc:mysql://<host>:33060/<database>"
+ "?sslMode=VERIFY_CA"
+ "&allowPublicKeyRetrieval=true"
+ "&trustCertificateKeyStoreUrl=file:/path/to/lindorm-ca.p12"
+ "&trustCertificateKeyStorePassword=changeit"
+ "&trustCertificateKeyStoreType=PKCS12";
Connection connection = DriverManager.getConnection(url, user, password);注: trustCertificateKeyStoreUrl には、サーバー証明書のパスではなく、トラストストアのファイルパスを指定します。コンソールからダウンロードした CA 証明書を PKCS12 または JKS 形式のトラストストアにインポートしてから、JDBC に渡してください。
よくある質問
Q: SSL 暗号化は、コンソールで有効にするとすぐに有効になりますか?
A: SSL 暗号化を使用するかどうかは、サーバーとクライアント間でネゴシエートされます。このネゴシエーションを行うには、クライアントで
sslModeを設定する必要があります。Q: SSL 暗号化はパフォーマンスオーバーヘッドを引き起こしますか?
A: SSL 暗号化を有効にすると、パフォーマンスオーバーヘッドが発生します。パフォーマンスが重視されるシナリオでは、接続文字列で
sslMode=DISABLEDを設定して SSL 暗号化を無効にすることを推奨します。Q: 証明書パスを指定するだけで、SSL は自動的に有効になりますか?
A: いいえ。MySQL プロトコルの SSL リンクは、サーバー側で対応する SSL スイッチがオンになって初めて有効になります。
Q: REQUIRED と VERIFY_CA の違いは何ですか?
A:
REQUIREDは、TLS 暗号化リンクの確立のみを要求します。クライアントがサーバー証明書チェーンを検証することは要求しません。VERIFY_CAは、TLS 暗号化リンクを確立するだけでなく、クライアントがサーバー証明書を発行した CA ルート証明書を信頼することも要求します。Q: --ssl-ca にはどの証明書を指定すればよいですか?
A: コンソールで
[CA 証明書のダウンロード]をクリックしてダウンロードした CA ルート証明書を指定してください。server.certというサーバー証明書を直接--ssl-caとして使用しないでください。Q: JDBC は crt ファイルを直接使用できますか?
A: MySQL Connector/J のバージョンによって、PEM 証明書パラメータのサポート状況は異なります。一般的には、コンソールからダウンロードした CA 証明書を PKCS12 または JKS 形式のトラストストアにインポートし、それを
trustCertificateKeyStoreUrl、trustCertificateKeyStorePassword、およびtrustCertificateKeyStoreTypeを介して JDBC に渡します。