はじめに

Verticaではクライアントとの通信をSSL/TLSを使用して暗号化することができます。認証の方式としては、サーバ認証と相互認証の2種類があり、こちらの記事では、相互認証を使用したSSL/TLS通信の設定方法をご紹介します。
相互認証を使用すると、クライアント証明書を保持しているクライアントのみが対象のDBユーザに接続できるようになり、クライアント‐サーバ間の接続をよりセキュアに保つことができます。



設定に必要なファイル

相互認証方式のSSL/TLS通信を行うには以下のファイルが必要となります。
・サーバ証明書(自己署名証明書でも可)
・ルート証明書
・サーバの秘密鍵
・クライアント証明書
・クライアントの秘密鍵

設定方法

構文

サーバ証明書、秘密鍵、ルート証明書の登録

OSのdbadminユーザから以下のコマンドにて、Verticaへサーバ証明書とサーバの秘密鍵、ルート証明書を登録します。
admintools -t set_ssl_params -d <データベース名> -p <パスワード> -k <サーバの秘密鍵> -c <サーバ証明書> -a <ルート証明書>

VerticaデータベースのSSL/TLS通信の有効化

Verticaデータベースへdbadminユーザにて接続した後、以下のSQLコマンドを実行します。
ALTER DATABASE <データベース名> SET EnableSSL = 1;

Verticaデータベースの相互認証モードの設定

Verticaデータベースへdbadminユーザにて接続した後、以下のSQLコマンドを実行します。
# 認証設定の作成
CREATE AUTHENTICATION <認証名> METHOD ‘tls’ HOST TLS ‘接続元IP CIDR’;

# DBユーザへの認証の付与
GRANT AUTHENTICATION <認証名> TO ;


注意点

クライアント証明書を作成するときは、Common Name(CN)に接続対象のDBユーザ名を必ず含めてください。


設定例

以下に自己署名証明書を使用した設定例を記載します。正規の証明書を保持している場合は手順「1. サーバ証明書(自己署名)の作成」と「5. クライアント証明書(自己署名)の作成」はスキップしてください。
なお、OSコマンドの詳細についてはマニュアル等でご確認ください。

サーバ証明書の設定

1. サーバ証明書(自己署名)の作成


## openssl.cnfのサンプル
######################################################################
[ req ]
default_bits = 2048
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name

######################################################################
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = JP
countryName_min = 2
countryName_max = 2

stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = Not Applicable

localityName = Locality Name (eg, city)
localityName_default = Not Applicable


0.organizationName = Organization Name (eg, company)
0.organizationName_default = CompanyName

organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default =

commonName = Common Name (eg, your website’s domain name)
commonName_max = 64

2. サーバの秘密鍵とサーバ証明書の検証


3. サーバ証明書と秘密鍵をVerticaに登録


4. VerticaのSSL接続を有効化



相互認証モードの設定

5. クライアント証明書(自己署名)の作成
以下の実行例ではDBユーザ「testuser」に接続するための証明書、秘密鍵の生成を行っています。ファイル名はDBユーザ名にあわせて変更してください。



6. クライアント証明書の検証



7. ユーザ証明書と秘密鍵の配置
※以下はvsqlを使用する際の設定方法です。JDBC、ODBCクライアントを使用した接続は参考情報の「Configuring TLS for JDBC and ODBC clients」を参照してください。



8. 相互認証モードの構成



9. 相互認証接続の確認


以上で設定は完了です。

参考情報

・Vertica-クライアント間通信を暗号化(SSL/TLS)する方法(サーバ認証)
http://vertica-tech.ashisuto.co.jp/ssl-tls_connection_servermode/

・TLS Authentication
https://www.vertica.com/docs/10.1.x/HTML/Content/Authoring/Security/ClientAuth/ConfiguringTLSAuthentication.htm

・Implementing Client Self-Authentication
https://www.vertica.com/docs/10.1.x/HTML/Content/Authoring/Security/ClientAuth/ImplementingClientSelfAuthentication.htm

・Using Mutual Mode SSL Server Authentication with Vertica: Validating Your SSL Key and Certificate
https://www.vertica.com/kb/Using-Mutual-Mode-SSL-Server-Authentication-with-Vertica/Content/BestPractices/Using-Mutual-Mode-SSL-Server-Authentication-with-Vertica.htm

・Configuring TLS for JDBC and ODBC clients
https://www.vertica.com/docs/10.1.x/HTML/Content/Authoring/Security/TLS/ConfiguringTLS.htm


検証バージョンについて

この記事の内容はVertica 10.1で確認しています。


更新履歴

2021/08/30 本記事を公開