セキュリティ転送層プロトコル(TLS)は、2つの通信アプリケーション間で機密性とデータの整合性を提供します。OceanBaseデータベースは、既存のTCP通信にSSL/TLSプロトコルを拡張してサポートし、通信の暗号化問題を解決します。
OceanBaseデータベースは、製品アーキテクチャの観点から、以下の3つの基本部分に分けられます。

その中で、2種類のプロトコルが通信に使用されます:
MySQLプロトコル:ドライバ層 <=> データリンク層、データリンク層 <=> DB層間の通信には拡張MySQLプロトコルが使用されます。
OB-RPCプロトコル:ノード間、またはノードとliboblog、ob_adminなどとの通信には、ノード固有のRPCプロトコルが使用されます。
データリンク層およびDB層において、OBServerノード、liboblog、ob_adminなどのコンポーネントはすべてSSL/TLS暗号化通信をサポートしており、基盤としてOpenSSLまたは第三者のSSLライブラリに依存して、業務に安全な暗号化転送サービスを提供します。
サポートされている秘密鍵・証書の読み込み方法
OBServerノード、liboblog、obadminなどのコンポーネントの基盤となる通信はすべてLibeasyライブラリに依存しているため、サポートされている秘密鍵・証書の読み込み方法はすべて同じです(ローカルファイルモード)。つまり、CA証書、ユーザー証書、秘密鍵をwalletフォルダ内に配置し、パラメータで有効に設定すると、そのディレクトリから読み込んで読み込みます。
有効化方法
ノード間の転送暗号化の有効化は、複数のパラメータを組み合わせて使用します。
秘密鍵・証書・CA証書の取得方法を指定します。
ローカルファイルモード
alter system set ssl_external_kms_info = ' { "ssl_mode":"file" }';対応プロトコルのSSLを有効に設定します。
alter system set ssl_client_authentication = 'TRUE'; TRUEに設定すると、MySQL通信のSSLが即時に有効になります。RPC通信のSSLアローリストを設定します。ノード間のTCP接続はすべて長時間接続であるため、ノードを再起動する必要があります。その後、RPC SSL暗号化通信が有効になります。
RPC通信のSSLではアローリストの設定が必要です。 alter system set _ob_ssl_invited_nodes='ALL'; クラスタ全体を有効にする alter system set _ob_ssl_invited_nodes='xx.xx.xx.xx, xx.xx.xx.xx'; 特定IPのobserverを有効にする ssl
ノードでの通信暗号化の有効化状況の確認方法
最も簡単な方法は、MySQLポートとRPCポートでパケットキャプチャを行い、暗号化が有効になっているかどうかを確認することです。さらに、以下の方法でも確認できます:
OBClient/MySQLでノードにログインし、システムテナントで
oceanbase.GV$OB_SERVERSテーブルのssl_key_expired_timeフィールドを検索して、暗号化が有効になっているかどうかを確認します。このフィールドは、現在のノードでSSLを有効にした際に使用されたSSL証書の有効期限をUTC時刻で記録しており、単位はマイクロ秒です。
obclient> select svr_ip, svr_port,zone, ssl_key_expired_time, from_unixtime(ssl_key_expired_time/1000000) from oceanbase.GV$OB_SERVERS; +-----------------+----------+-------+----------------------+---------------------------------------------+ | svr_ip | svr_port | zone | ssl_key_expired_time | from_unixtime(ssl_key_expired_time/1000000) | +-----------------+----------+-------+----------------------+---------------------------------------------+ | xxx.xxx.xxx.xxx | 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.xx
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が正常に有効になっているかどうかを判断します。