OBServerノード、liboblog、obadminなどのコンポーネントの基盤となる通信はすべてLibeasyライブラリに依存しているため、サポートされている秘密鍵/証書の読み込み方法はすべて同じです(ローカルファイルモード)。つまり、CA証書、ユーザー証書、秘密鍵をwalletフォルダ内に配置し、パラメータで有効に設定すると、そのディレクトリから読み込んでロードします。
有効化方法
OBServerの伝送暗号化は、複数のパラメータを組み合わせて有効にします。
rootユーザーでデータベースのsysテナントにログインします。
私钥/証書/CA証書の取得方法を指定します。
説明
OceanBaseデータベースCommunity Editionでは、OBServerの伝送暗号化を設定する際は、この手順を無視してください。
ALTER SYSTEM SET ssl_external_kms_info = ' { "ssl_mode":"file" }';MySQLポートのSSL通信を設定します。
デフォルトでは、MySQLポートのSSL通信は無効です。まずSSLプロトコルのバージョン番号を指定してSSL通信を有効にし、変更は即時に反映されます。
パラメータ
sql_protocol_min_tls_versionを使用してSSLプロトコルのバージョン番号を指定できます。現在サポートされているSSLプロトコルのバージョン番号はTLSv1、TLSv1.1、TLSv1.2、TLSv1.3です。バージョン番号を指定すると、指定したバージョン番号以上のバージョンプロトコルがサポートされます。SSL接続を有効にする詳細については、sql_protocol_min_tls_versionを参照してください。ALTER SYSTEM SET sql_protocol_min_tls_version = 'TLSv1.1';パラメータ
ssl_client_authenticationを使用してSSL接続を有効にできます。SSL接続を有効にする詳細については、ssl_client_authenticationを参照してください。--TRUEに設定すると、MySQL通信のSSLが即時に有効になります。 ALTER SYSTEM SET ssl_client_authentication = 'TRUE';
RPC通信のSSLホワイトリストを設定します。OBServer間のTCP接続はすべて長時間接続であるため、RPC SSL暗号化通信を有効にするには、OBServerを再起動する必要があります。
--RPC通信のSSLにはホワイトリストの設定が必要です。 --クラスタ全体で有効にします。 ALTER SYSTEM SET _ob_ssl_invited_nodes='ALL'; --特定のIPアドレスのOBServerでSSLを有効にします。 ALTER SYSTEM SET _ob_ssl_invited_nodes='135.xxx.xx.xx, 128.xxx.xx.xx';
TLS秘密鍵なし認証の設定
OBServerの身元を検証する必要がない場合、TLS秘密鍵なし認証によりクライアントはCA証書を読み込む必要がありません。検証が必要な場合は、CA証書を読み込む必要があります。このセクションでは、TLS秘密鍵なし認証の設定と使用方法について説明します。
手順
証明書の設定
CA証明書ファイル(ca.pem)に両者の証明書情報が含まれていることを確認します。内容は以下のとおりです:
CopyInsert // ca.pemファイルの内容例 -----BEGIN CERTIFICATE----- // OBserverのCA証明書 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- // クライアントのCA証明書 -----END CERTIFICATE-----例:
-----BEGIN CERTIFICATE----- MIIDpzCCAo+gAwIBAgIJALjo7NLQCbMwMA0GCSqGSIb3DQEBCwUAMGoxCzAJBgNV BAYTAkNOMRAwDgYDVQQIDAdCZWlqaW5nMRkwFwYDVQQHDBBIYWlkaWFuIERpc3Ry aWN0MQswCQYDVQQKDAJPQjEMMAoGA1UECwwDc3lzMRMwEQYDVQQDDAp3emhfY2Ff cGVtMB4X -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIDAzCCAeugAwIBAgIBATANBgkqhkiG9w0BAQsFADA8MTowOAYDVQQDDDFNeVNR TF9TZXJ2ZXJfNS43LjI0X0F1dG9fR2VuZXJhdGVkX0NBX0NlcnRpZmljYXRlMB4X DTE5MDQyOTA5MDc1NVoXDTI5MDQyNjA5MDc1NVowPDE6MDgGA1UEAwwxTXlTUUxf U2VydmVy -----END CERTIFICATE-----証明書情報の抽出
証明書の
SUBJECTフィールドとISSUERフィールドを抽出し、ファイルパス形式にフォーマットします。// SUBJECT $ openssl x509 -noout -subject -in client-cert.pem | sed 's/.\{8\}//' | sed 's/, /\//g' | sed 's/ = /=/g' | sed 's/^/\//' /C=CN/ST=Beijing/L=Haidian District/O=OB/OU=sys/CN=client_pem // ISSUER $ openssl x509 -noout -issuer -in client-cert.pem | sed 's/.\{7\}//' | sed 's/, /\//g' | sed 's/ = /=/g' | sed 's/^/\//' /C=CN/ST=Beijing/L=Haidian District/O=OB/OU=sys/CN=ca_pemユーザーの作成
データベースに接続した後、ユーザーを作成する際に
REQUIREフィールドを使用して証明書を指定します。パスワードが指定されていない場合、デフォルトのパスワードは空になります。CREATE USER tony user tony require SUBJECT '/C=CN/ST=Beijing/L=Haidian District/O=OB/OU=sys/CN=client_pem';証明書を使用したログイン
$obclient -h100.88.109.171 -P28205 -uuser1@sys --ssl-ca=/home/user1/wallet2/ca.pem --ssl-cert=/home/user1/wallet2/client-cert.pem --ssl-key=/home/user1/wallet2/client-key.pem実行結果は次のとおりです:
Welcome to the OceanBase monitor. Commands end with ; or \g. Your OceanBase connection id is 3221503926 Server version: 5.7.25 OceanBase 4.2.5.1 (r1-9e815083770a3f4a7c9bffd93493d96b58aea72f) (Built Nov 11 2024 11:52:31) Copyright (c) 2000, 2018, OceanBase and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
よくある質問
- 証書認証方式
- 双方向認証:クライアントが
--ssl-caを指定した場合、双方が相手方の証書を検証する必要があります。 - 単方向認証:クライアントが
--ssl-caを指定しない場合、OBserverのみがクライアントの証書を検証します。
- ログイン失敗の可能性のある原因
- 空パスワードによるログイン失敗:TLSのパスワードレス認証には証書の使用が必須です。空パスワードでログインすると、
ERROR 1045 (42000): Access denied for user 'tony'@'xxx.xxx.xxx.xxx' (using password: NO)エラーが発生します。 - 証書検証失敗:
- クライアントが
--ssl-caを指定して双方向認証を行う場合、OBserverのca.pemにクライアントのCA証書が含まれていない、またはクライアントのca.pemにOBserverのCA証書が含まれていないと、ERROR 2026 (HY000): SSL connection error: error:00000001:lib(0):func(0):reason(1)エラーが発生します。 - 証書の形式が正しくないか、期限切れです。
- クライアントが
OBServerで通信暗号化が正常に有効になっているかどうかの確認方法
最も簡単な方法は、MySQLポートとRPCポートでパケットキャプチャを行い、暗号化が有効になっているかどうかを確認することです。その他の方法としては以下のようなものがあります:
OBClient/MySQLクライアントでOBServerにログインし、システムテナントで
oceanbase.GV$OB_SERVERSビューのssl_cert_expired_timeフィールドを検索して、暗号化が有効になっているかどうかを確認します。このフィールドは、現在のOBServerでSSLが有効になった際に使用されていたSSL証書の有効期限をUTC時刻で記録しており、単位はマイクロ秒です。
obclient> select svr_ip, svr_port,zone, ssl_cert_expired_time, from_unixtime(ssl_cert_expired_time/1000000) from oceanbase.GV$OB_SERVERS; +--------------+----------+-------+----------------------+---------------------------------------------+ | svr_ip | svr_port | zone | ssl_cert_expired_time | from_unixtime(ssl_key_expired_time/1000000) | +--------------+----------+-------+----------------------+---------------------------------------------+ | 100.xx.xx.xx | 13212 | zone1 | 1871860075 | 2029-04-26 09:07:55 | +--------------+----------+-------+----------------------+---------------------------------------------+ 1 row in set (0.00 sec)
MySQLポートでSSLが有効になっているかどうかの確認
MySQLクライアントまたはOBClientにログインし、\sコマンドを実行してSSLフィールドの例を確認します:
obclient> \s
--------------
obclient Ver 1.1.8 Distrib 5.7.24, for Linux (x86_64) using EditLine wrapper
Connection id: 3221506046
Current database: test
Current user: root@xx.xx.xx.39
SSL: Cipher in use is DHE-RSA-AES128-GCM-SHA256
Current pager: less
Using outfile: ''
Using delimiter: ;
Server version: 5.7.25 OceanBase 2.2.60 (r1-63cbd3084a3283523f09d6ba20795f77b95e046b) (Built Jun 30 2020 10:10:29)
Protocol version: 10
Connection: xx.xx.xx.189 via TCP/IP
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
TCP port: 13213
Active --------------
RPCポートでSSLが有効になっているかどうかの確認
OBServer.logファイル内のログで、「rpc connection accept」というキーワードを検索し、use_sslの値がTrueかFalseかを確認することで、RPC SSLが正常に有効になっているかどうかを判断します。
説明
RPC接続については、現在のところクラスタを再起動しないと変更が反映されません。または、クラスタを再起動せずに既存のRPC接続を切断した場合にのみ変更が反映されます。