サーチ…


前書き

TLS / SSLをサポートするようにReplicaSetを設定するには?

私たちはあなたのローカル環境に3ノード複製セットを配備し、私たちは自己署名証明書を使用します。 PRODUCTIONに自己署名証明書を使用しないでください。

クライアントをこのReplicaSetに接続する方法は?

Mongo Shellを接続します。

TLS / SSL、PKI(公開鍵インフラストラクチャ)証明書、および認証局についての説明は、このドキュメントの対象外です。

TLS / SSLをサポートするようにReplicaSetを設定するには?

ルート証明書を作成する

ルート証明書(別名CAファイル)は、証明書の署名と識別に使用されます。それを生成するには、以下のコマンドを実行します。

openssl req -nodes -out ca.pem -new -x509 -keyout ca.key

ルート証明書とその鍵は慎重に保管してください。両方とも証明書に署名するために使用されます。ルート証明書は、クライアントによっても使用される可能性があります。


証明書要求と秘密鍵の生成

証明書署名要求(CSRとも呼ばれます)を生成するときは、ノードの正確なホスト名(またはIP)をCommon Name(別名CN)フィールドに入力します。他のフィールドはまったく同じ値でなければなりません。 / etc / hostsファイルを変更する必要があるかもしれません。

以下のコマンドは、CSRファイルとRSA秘密鍵(4096ビット)を生成します。

openssl req -nodes -newkey rsa:4096 -sha256 -keyout mongodb_node_1.key -out mongodb_node_1.csr
openssl req -nodes -newkey rsa:4096 -sha256 -keyout mongodb_node_2.key -out mongodb_node_2.csr
openssl req -nodes -newkey rsa:4096 -sha256 -keyout mongodb_node_3.key -out mongodb_node_3.csr

レプリカセットの各ノードに1つのCSRを生成する必要があります。共通名はあるノードから別のノードに同じではないことに注意してください。複数のCSRを同じプライベートキーに基づいて設定しないでください。

3つのCSRと3つの秘密鍵が必要です。

mongodb_node_1.key - mongodb_node_2.key - mongodb_node_3.key
mongodb_node_1.csr - mongodb_node_2.csr - mongodb_node_3.csr

証明書リクエストに署名する

以前に生成されたCAファイル(ca.pem)と秘密鍵(ca.key)を使用して、以下のコマンドを実行して各証明書要求に署名します。

openssl x509 -req -in mongodb_node_1.csr -CA ca.pem -CAkey ca.key -set_serial 00 -out mongodb_node_1.crt
openssl x509 -req -in mongodb_node_2.csr -CA ca.pem -CAkey ca.key -set_serial 00 -out mongodb_node_2.crt
openssl x509 -req -in mongodb_node_3.csr -CA ca.pem -CAkey ca.key -set_serial 00 -out mongodb_node_3.crt

各CSRに署名する必要があります。

これで、3つのCSR、3つの秘密鍵、3つの自己署名証明書が必要になりました。秘密鍵と証明書のみがMongoDBによって使用されます。

mongodb_node_1.key - mongodb_node_2.key - mongodb_node_3.key
mongodb_node_1.csr - mongodb_node_2.csr - mongodb_node_3.csr
mongodb_node_1.crt - mongodb_node_2.crt - mongodb_node_3.crt

各証明書は1つのノードに対応します。あなたが各CSRに与えたCN /ホスト名を注意深く覚えておいてください。


各ノード証明書をその鍵で連結する

以下のコマンドを実行して、各ノード証明書を1つのファイル(MongoDB要件)の鍵で連結します。

cat mongodb_node_1.key mongodb_node_1.crt > mongodb_node_1.pem
cat mongodb_node_2.key mongodb_node_2.crt > mongodb_node_2.pem
cat mongodb_node_3.key mongodb_node_3.crt > mongodb_node_3.pem

これでPEMファイルが3つ必要になりました。

mongodb_node_1.pem - mongodb_node_2.pem - mongodb_node_3.pem

レプリカセットを展開する

あなたのpemファイルは現在のフォルダ、data / data1、data / data2、data / data3にあると仮定します。

次のコマンドを実行して、ポート27017,27018、および27019でリスニングする3つのノードReplicaSetを展開します。

mongod --dbpath data/data_1 --replSet rs0 --port 27017 --sslMode requireSSL --sslPEMKeyFile mongodb_node_1.pem
mongod --dbpath data/data_2 --replSet rs0 --port 27018 --sslMode requireSSL --sslPEMKeyFile mongodb_node_2.pem
mongod --dbpath data/data_3 --replSet rs0 --port 27019 --sslMode requireSSL --sslPEMKeyFile mongodb_node_3.pem

これで、ローカル環境に3ノード複製セットが導入され、そのすべてのトランザクションが暗号化されました。 TLSを使用せずにこのレプリカセットに接続することはできません。

相互SSL /相互信頼のためのレプリカセットの導入

クライアント証明書(相互SSL)をクライアントに提供するには、インスタンスを実行するときにCAファイルを追加する必要があります。

mongod --dbpath data/data_1 --replSet rs0 --port 27017 --sslMode requireSSL --sslPEMKeyFile mongodb_node_1.pem --sslCAFile ca.pem
mongod --dbpath data/data_2 --replSet rs0 --port 27018 --sslMode requireSSL --sslPEMKeyFile mongodb_node_2.pem --sslCAFile ca.pem
mongod --dbpath data/data_3 --replSet rs0 --port 27019 --sslMode requireSSL --sslPEMKeyFile mongodb_node_3.pem --sslCAFile ca.pem

これで、ローカル環境に3ノード複製セットが導入され、そのすべてのトランザクションが暗号化されました。 TLSを使用せずに、またはCAによって信頼されるクライアント証明書を提供せずにこのレプリカセットに接続することはできません。

あなたのクライアント(Mongo Shell)をReplicaSetに接続するには?

相互SSLなし

この例では、「 TLS / SSLをサポートするようにレプリカセットを設定する方法 」のセクションで生成したCAファイル(ca.pem)を使用します 。 CAファイルが現在のフォルダにあると仮定します。

あなたの3つのノードがmongo1:27017、mongo2:27018およびmongo3:27019で動作していると仮定します。 ( / etc / hostsファイルを変更する必要があるかもしれません)。

MongoDB 3.2.6より、CAファイルがオペレーティングシステムトラストストアに登録されている場合は、CAファイルを提供せずにレプリカセットに接続できます。

mongo --ssl --host rs0/mongo1:27017,mongo2:27018,mongo3:27019

それ以外の場合は、CAファイルを提供する必要があります。

mongo --ssl --sslCAFile ca.pem --host rs0/mongo1:27017,mongo2:27018,mongo3:27019

これであなたのReplicaSetに接続され、Mongo ShellとReplicaSet間のすべてのトランザクションが暗号化されます。

相互SSLで

ReplicaSetがクライアント証明書を要求する場合は、ReplicaSet Deploymentによって使用されるCAによって署名された証明書を提供する必要があります。クライアント証明書を生成する手順は、サーバー証明書を生成する手順とほぼ同じです。

実際には、CSR作成中にCommon Name Fieldを変更するだけで済みます。 Common Nameフィールドに1ノードのホスト名を入力する代わりに、 すべてのReplicaSetホスト名をコンマで区切って指定する必要があります

openssl req -nodes -newkey rsa:4096 -sha256 -keyout mongodb_client.key -out mongodb_client.csr
...
Common Name (e.g. server FQDN or YOUR name) []: mongo1,mongo2,mongo3

Common Nameフィールドが長すぎる場合(長さが64バイトを超える場合)、Common Nameのサイズの制限に直面することがあります。この制限を回避するには、CSRを生成するときにSubjectAltNameを使用する必要があります。

openssl req -nodes -newkey rsa:4096 -sha256 -keyout mongodb_client.key -out mongodb_client.csr -config <(
cat <<-EOF
[req]
default_bits = 4096
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn
 
[ dn ]
CN = .
 
[ req_ext ]
subjectAltName = @alt_names
 
[ alt_names ]
DNS.1 = mongo1
DNS.2 = mongo2
DNS.3 = mongo3
EOF
)

次に、CA証明書と鍵を使用してCSRに署名します。

openssl x509 -req -in mongodb_client.csr  -CA ca.pem -CAkey ca.key -set_serial 00 -out mongodb_client.crt

最後に、鍵と署名付き証明書を連結します。

cat mongodb_client.key mongodb_client.crt > mongodb_client.pem

レプリカセットに接続するには、新しく生成されたクライアント証明書を提供できるようになりました。

mongo --ssl --sslCAFile ca.pem --host rs0/mongo1:27017,mongo2:27018,mongo3:27019 --sslPEMKeyFile mongodb_client.pem

これであなたのReplicaSetに接続され、Mongo ShellとReplicaSet間のすべてのトランザクションが暗号化されます。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow