セキュアトランスポートレイヤープロトコル(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が正常に有効化されたかどうかを判断します。