Redis
 Computer >> コンピューター >  >> プログラミング >> Redis

RedisEnterpriseへの安全な接続の有効化

サーバーへの安全な接続を利用するソフトウェアを構築することは、すべての開発者が持っているスキルでなければなりません。特定の実稼働環境でSSLを有効にしないことを選択した場合でも、使用するすべてのサーバーへの接続を保護する方法を知っておく必要があります。この投稿は、JavaファンのためにPythonでRedisEnterpriseCloudへの安全な接続を有効にするための約束されたフォローアップです。

この投稿では、SSLを使用してRedis Enterprise CloudとJavaクライアントプログラム間の暗号化された接続をオン、テスト、および構成するための簡単なプロセスについて説明します。 JavaプログラムでSSLを有効にすることの紛らわしい部分の1つは、証明書とキーをJavaが理解できる形式に変換することです。これはJavaのみの手順であり、プロセスのテスト手順と構成手順の間に忍び込む必要があります。

ツールセット

これらのツールを入手して、RedisでSSLを有効にするためのチケットを閉じることができます:

  • RedisEnterpriseCloudアカウント
  • OpenSSL
  • Java SE JDK
  • ジェダイ

また、提供されている小さなスクリプトを実行できるように、Bashシェルをインストールする必要があります。オペレーティングシステムに標準インストールの一部としてBashが含まれていない場合は、Bashをインストールするか、スクリプトをお好みのシェルに変換する必要があります。

SSLを使用するには、RedisEnterpriseCloudサブスクリプションでSSL機能が有効になっている必要があります。アカウントでSSLがまだ有効になっていない場合は、Redisサポートチームに連絡して有効にする必要があります。アカウントダッシュボードのメインメニューに、サポートチームに連絡するためのリンクがあります。 SSLの設定に関するドキュメントは、RedisEnterpriseCloudの運用および管理ガイドにあります。

SSLとTLS

念のために言っておきますが、Pythonの投稿と同様に、頭字語「SSL」を使用して「SSL」または「TLS」で保護された接続を指すという非公式の慣習に従います。現在(2018年6月)Redis Enterprise CloudはTLSプロトコルのバージョン1.2を使用して接続を保護していますが、Redis Enterprise CloudとJedisはどちらも「SSL」を使用しているため、これに従います。

ステップ1と2

最初の2つの手順は、PythonクライアントのSSLの設定に使用される手順と同じです。ここですべてを繰り返すのではなく、Pythonの投稿に戻って紹介します。その投稿には、任意の言語でSSLを使用するための有用な情報がたくさんあります。続行する前に、ステップ3までのすべてを読むことをお勧めします。

ステップ2の後、プロセスはJavaで分岐し始めるため、ここにステップ2.5を挿入して、RedisEnterpriseCloudからダウンロードしたクレデンシャルファイルをJavaSEで適切に機能する形式に変換します。

ステップ2.5:クレデンシャルの変換

Oracleは、JavaSEの標準部分として、Java Cryptography Architecture(JCA)を含むさまざまなセキュリティサービスを提供しています。 JCAは、プラグインプロバイダーによって実装されるセキュリティサービスを呼び出すためのJavaアプリケーション用のAPIのセットを定義します。アプリケーションは、利用可能なプロバイダー(標準のAPI以外の追加サービスを提供することが多い)を自由に使用できますが、ほとんどのアプリケーションは、JDKに付属のデフォルトのプロバイダーを使用します。

デフォルトのプロバイダーを使用する際の課題は、証明書とキーを格納するためにLinuxSSLライブラリで一般的に使用されるPEM形式をサポートしていないことです。 JCAでは、資格情報はパスワードで保護されたキーストアリポジトリに保存されます。 Javaアプリケーションでは、2つのリポジトリを使用するのが一般的です。1つはドキュメントでキーストアと呼ばれ、もう1つはトラストストアと呼ばれます。キーストアは、クライアントソフトウェアの証明書と秘密キーを格納するために使用され、トラストストアは、認証局からの信頼できる証明書を格納するために使用されます。 PEM形式はRedisEnterpriseCloudで使用されるため、OpenSSLとJava Keytoolを使用してスクリプトを作成し、PEMファイルをJavaクライアントプログラムで使用できるトラストストアとキーストアに変換するために必要なすべてのコマンドを実行します。

>

次のスクリプトtransmogrify.shは、redis_credentials.zipを解凍したディレクトリから実行する必要があります。このスクリプトは、Redis認証局証明書(redis_ca.pem)を使用してトラストストア(redis_truststore.p12)を作成し、クライアント証明書(redis_user.crt)と対応する秘密キー(redis_user_private.key)を使用してキーストア(redisclient_keystore.p12)を作成します。 。クライアントキーストアはパスワードで保護されていますが、キーストアのセキュリティを確保するための手順を実行する必要があります。キーストアとトラストストアの両方を、特定のRedisデータベースインスタンスに接続するすべてのクライアントに配布する必要があるため、これらのファイルを資格管理システムに統合する必要があります。

JDK9より前のバージョンのJavaは、独自のJava KeyStore(JKS)形式を採用していましたが、JDK9以降、Javaのデフォルトは業界標準のPKCS12形式になっています。このスクリプトはPKCS12形式のストアを作成しますが、スクリプトを変更できる場合は、ストアタイプオプションとファイル拡張子を変更してJKS形式を使用してください。

ステップ3:クライアントコードでSSLを構成する

JavaクライアントでSSLを有効にする最後の手順は、SSL接続を確立するようにクライアントコードを変更することです。サンプルコードは、Redis Enterprise Cloudインスタンスへの安全な接続を確立してから、RedisPINGコマンドを送信します。変更されたコードは次のようになります:

ステップ2.5でJavaプログラム用に作成したキーストアまたはトラストストアをコードのどこにも参照していないことに気付くでしょう。 JCAプロバイダーのデフォルトの動作は、サーバーを認証します。キーと証明書の情報を提供するだけです。これは、JCAプロバイダーによって読み取られたシステムプロパティを使用して実行できます。 IDEアプリケーション構成またはJavaコマンドラインに次のパラメーターを追加します。

システムの適切な場所とパスワードを使用するように変更します。

キーストアのプロパティ:

  • javax.net.ssl.keyStoreType =PKCS12
  • javax.net.ssl.keyStore =/ Users / tague / dev / ssl-testj / redisclient_keyStore.p12
  • javax.net.ssl.keyStorePassword =redis

transmogrifyスクリプトによって作成されたキーストアのタイプ(別名フォーマット)、場所、およびパスワードを指定します。同様に、trustStoreのプロパティ:

  • javax.net.ssl.trustStoreType =PKCS12
  • javax.net.ssl.trustStore =/ Users / tague / dev / ssl-testj / redis_truststore.p12
  • javax.net.ssl.trustStorePassword =redis

trustStoreのタイプ、場所、およびパスワードを指定します。最後のプロパティjavax.net.debug=ssl:handshakeは、デバッグ情報を有効にするために使用されるオプションのプロパティです。

SSLを使用するようにJedisを構成することは特に難しいことではありませんが、PEMクレデンシャルをJavaキーとトラストストアに変換するために必要な手順に慣れていない場合、最初は不快感を与える可能性があります。

うまくいけば、この投稿が、Python開発者に提供したRedisEnterpriseCloudへの安全な接続をセットアップするための同じ穏やかな紹介をJavaファンに提供しました。セキュリティに関する最後の注意点を1つ残しておきたいと思います。ほとんどの組織には、パスワードと秘密鍵を管理するための特定のポリシーと手順があります。運用チームとセキュリティチームに確認して、ガイドラインに従っていることを確認してください。


  1. DynomiteデータベースをRedisEnterpriseActive-Activeデータベースに移行する方法

    この記事のパートI「DynomiteデータベースをRedisEnterpriseActive-Activeデータベースに移行する理由」では、DynomiteとRedisEnterpriseのアーキテクチャと機能を比較しました。 Redis Enterpriseが、機能が豊富で管理しやすい方法でRedis Enterpriseを地理的に分散し、同時書き込み間の競合を心配しないようにする方法を示しました。 パートIIでは、DynomiteからRedisEnterpriseに移行するために利用できる移行オプションについて説明します。 以降、Redis Enterpriseの自己管理型オファリング

  2. DynomiteデータベースをRedisEnterpriseActive-Activeデータベースに移行する理由

    2009年の創設以来、RedisOSSには非常に活気のあるオープンソースコミュニティがあります。多くのツールとユーティリティがその周りで開発されており、非分散データストアのピアツーピア地理的分散レイヤーであるDynomiteはその1つです。 Dynomiteは、Netflixのエンジニアのチームによって開発され、オープンソースとしてリリースされました。特定のニーズに対応する優れたソリューションを提供してきましたが、ここ数年は効果的に維持されていません。さらに、Redis OSSの機能、コマンド、データタイプの一部(Pub / SubやStreamsなど)は、DynomiteのRedisOSS