本記事では、ODPの転送暗号化の設定方法について説明します。
バージョン情報
ODPはバージョン1.8.1からSSL機能を提供しています。-Vパラメータを使用するとODPのバージョン情報を確認できます。
ODPのインストールパスで以下のコマンドを実行すると、ODPのバージョン情報を確認できます。例:
./bin/obproxy -V
obproxy (OceanBase 1.8.1 3870.el6)
REVISION: 3870-local-8df895b0912b58dea3986320baeda7803bf57bd1
BUILD_TIME: Nov 2 2020 21:53:06
BUILD_FLAGS: -g -O2 -D_OB_VERSION=1000 -D_NO_EXCEPTION -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -DNDEBUG -D__USE_LARGEFILE64 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILE -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -Wall -Werror -Wextra -Wunused-parameter -Wformat -Wconversion -Wno-deprecated -Wno-invalid-offsetof -finline-functions -fno-strict-aliasing -mtune=core2 -Wno-psabi -Wno-sign-compare -DGCC_52 -DUSE_POSIX_FALLOCATE -DSUPPORT_SSE4_2 -DHAVE_SCHED_GETCPU -DHAVE_REALTIME_COARSE -DOB_HAVE_EVENTFD -DHAVE_FALLOCATE -DHAVE_MINIDUMP
キーと証明書の設定
現在、ファイル設定方式のみサポートされています。
この設定は新しく作成された接続にのみ適用され、既存の接続には影響しません。設定は即時に反映され、再起動は不要です。
ODPのroot@proxysysアカウントでログインした後、ファイルを使用して証明書、公開鍵、秘密鍵を設定します。例:
obclient> UPDATE proxyconfig.security_config SET CONFIG_VAL= '{"sourceType" : "FILE", "CA" : "certs/ca.pem", "publicKey" : "certs/server-cert.pem", "privateKey" : "certs/server-key.pem"}' WHERE APP_NAME = 'obproxy' and VERSION = '1';
ここで、sourceTypeフィールドは必ずFILEに設定する必要があります。CAはCA証明書の保存場所を示し、publicKeyは公開鍵証明書の保存場所を示し、privateKeyは秘密鍵証明書の保存場所を示します。
SELECTステートメントを使用して、ODPの証明書、公開鍵、秘密鍵が設定されているかどうかを確認します。例:
obclient> SELECT CONFIG_VAL FROM proxyconfig.security_config WHERE APP_NAME = 'obproxy';
+---------------+
| CONFIG_VAL |
+---------------+
| SSL INFO FILE |
+---------------+
1 row in set (0.00 sec)
クライアントとの間のSSL接続の設定
enable_client_ssl構成パラメータは、クライアントとODPの間でSSL接続を有効にするかどうかを制御します。デフォルト値はfalseであり、クライアントとの間でSSL接続を使用しないことを意味します。
enable_client_ssl構成パラメータがtrueの場合、ODPはクライアントにSSL機能を提供できることを意味します。
この構成は新規接続にのみ適用され、既存の接続には影響しません。構成は即時に反映され、再起動は不要です。
クライアントとODPの間でSSL接続を正常に確立するためには、クライアント自体もSSL機能をサポートしている必要があります。例えば、MySQL公式クライアントプログラム(mysql)の場合、対応するプログラムバージョンがSSL機能をサポートしているかどうかを確認する必要があります。
クライアントを使用してODPにログインした後、'\s'文字列を送信してSSLフィールドの値を確認できます。このフィールドから、クライアントとODPの間の接続がSSL機能を使用しているかどうかを確認できます。
SSLフィールドの値が
Not in useでない場合、クライアントとODPの間の接続でSSL機能が使用されていることを意味します。SSLフィールドの値が
Not in useの場合、クライアントとODPの間の接続で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.xx via TCP/IP
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
TCP port: 13213
Active --------------
サーバーとの間のSSL接続の設定
構成パラメータenable_server_sslは、ODPとOBServerの間でSSL接続を有効にするかどうかを制御します。デフォルト値はfalseであり、サーバーとの間でSSLを有効にしないことを意味します。
enable_server_sslがtrueの場合、ODPはOBServerとSSL機能を有効にできることを意味します。
この構成は新規接続にのみ適用され、既存の接続には影響しません。構成は即時に反映され、再起動は不要です。