サーバーの証明書の準備

クライアントとノード間の暗号化またはノード間の暗号化用のSSL証明書を生成する手順

クライアントとノード間の暗号化、またはノード間の暗号化でSSL暗号化を使用するには、keytoolを使用してSSL証明書を生成する必要があります。1種類の暗号化に対して証明書を生成した場合、もう一方の種類に対して証明書を再度生成する必要はありません。同じ証明書が両方の暗号化に使用されます。すべてのノードに、関連するすべてのSSL証明書が必要です。キーストアには秘密鍵が含まれています。トラストストアには各ノードのSSL証明書が含まれています。信頼でき、認識されている公的認証局による署名は必要ありません。

手順

  • クラスターの各ノード用に秘密鍵と公開鍵の組み合わせを生成します。ノードを識別する別名を使用します。キーストア用のパスワード、dname(氏名、組織単位、組織、市区町村、州/都道府県、国)、キー用のパスワードのプロンプトが表示されます。dnameは、CN値にIPアドレス、またはノードの場合はFQDNを使用して生成されます。
    $  keytool -genkey -keyalg RSA -alias node0 -keystore keystore.node0
  • 生成コマンドでは、コマンドラインにプロンプトを求めるすべての情報を含めることもできます。この例では、別名にnode0、キーストア名にkeystore.node0を使用し、キーストアとキーの両方にcassandraの同一パスワード、node0のIPアドレスを識別するdnameに172.31.10.22を使用しています。
    $  keytool -genkey -keyalg RSA -alias node0 -keystore keystore.node0 -storepass cassandra -keypass cassandra -dname "CN=172.31.10.22, OU=None, O=None, L=None, C=None"
  • 証明書の公開部分を個別のファイルにエクスポートします。
    $  keytool -export -alias cassandra -file node0.cer -keystore .keystore
  • keytool -importコマンドを使用して、node0.cer証明書をノードのnode0トラストストアに追加します。
    $  keytool -import -v -trustcacerts -alias node0 -file node0.cer -keystore truststore.node0
  • cqlshは、生成された形式の証明書では使用できません。opensslを使用して、鍵なしの証明書のPEMファイルnode0.cer.pem、および証明書なしの鍵のPEMファイルnode0.key.pemを生成します。まず、この例では、キーストアがPKCS12形式でインポート先のキーストア、node0.p12にインポートされます。これに2つのPEMファイルの変換を作成する2つのコマンドが続きます。
    $  keytool -importkeystore -srckeystore keystore.node0 -destkeystore node0.p12 -deststoretype PKCS12 -srcstorepass cassandra -deststorepass cassandra
    openssl pkcs12 -in node0.p12 -nokeys -out node0.cer.pem -passin pass:cassandra
    openssl pkcs12 -in node0.p12 -nodes -nocerts -out node0.key.pem -passin pass:cassandra
  • クライアントとリモート・ノード間の暗号化、またはノード間の暗号化では、scpなどのコピー・ツールを使用して、node0.cerファイルを各ノードにコピーします。各ノードへのコピーが完了したら、ファイルをトラストストアにインポートします。この例では、node0の証明書をnode1のトラストストアにインポートします。
    $  keytool -import -v -trustcacerts -alias node0 -file node0.cer -keystore truststore.node1
  • .keystoreファイルがシステムの任意のユーザーではなく、Cassandraのデーモンによってのみ読み取り可能になるようにします。
  • keytool -listを使用して、証明書がキーストア・ファイルとトラストストア・ファイルに存在することを確認します。この例は、キーストア・ファイルでnode1証明書、トラストストア・ファイルでnode0とnode1の証明書を確認します。
    $  keytool -list -keystore keystore.node1
    keytool -list -keystore truststore.node1