本記事では、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機能を有効にできます。
この設定は新規接続にのみ適用され、既存の接続には影響しません。設定は即時に反映され、再起動は不要です。