web-dev-qa-db-ja.com

MongoDBエラー:証明書チェーンの自己署名証明書

私は、SSLを使用するドッキングされたMongoDBをテストするために設定しています。設定はすべてうまくいきますが、接続しようとすると次のエラーが発生します。

SSL peer certificate validation failed: self signed certificate in certificate chain.

CAとサーバー/クライアントの証明書を生成する方法は次のとおりです。

# CA
openssl genrsa -out ca/ca.key 2048
openssl req -x509 -new -key ca/ca.key -days 10000 -out ca/ca.crt

# Server
openssl genrsa -out server/mongodb.key 2048
openssl req -new -key server/mongodb.key -out server/mongodb.csr
openssl x509 -req -in server/mongodb.csr -CA ca/ca.crt -CAkey ca/ca.key -CAcreateserial -out server/mongodb.crt -days 365
cat server/mongodb.key server/mongodb.crt > server/server.pem

# Client
openssl genrsa -out client/cl.key 2048
openssl req -new -key client/cl.key -out client/cl.csr
openssl x509 -req -in client/cl.csr -CA ca/ca.crt -CAkey ca/ca.key -CAcreateserial -out client/cl.crt -days 365
cat client/cl.key client/cl.crt > client/cl.pem

これが私のMongoDB構成ファイルです(ファイルパスは無視してください)。

net: 
  bindIp: 0.0.0.0
  port: 28018
  ssl: 
    CAFile: /etc/mongo/ssl/ca/ca.crt
    PEMKeyFile: /etc/mongo/ssl/server/server.pem
    mode: requireSSL
storage: 
  dbPath: /mongo/db
  journal: 
  enabled: true

そして、これが私がそれに接続している方法です:

mongo --Host 127.0.0.1 --port 28018 --ssl --sslCAFile mongoconf/config/ssl/server/server.pem --sslPEMKeyFile mongoconf/config/ssl/client/cl.pem

ローカルのmongoconf/configは、コンテナのetc/mongoにマップされます。

3
adsalpha

--sslCAFileを指すserver.pemファイルにあるように見えるCAファイルではなく/etc/mongo/ssl/ca/ca.crt。その結果、クライアント接続用に生成した証明書は有効とは見なされません。

いくつかのオプションがあり、クライアントによる証明書なしの接続を許可できます(クライアント側はSSL暗号化されたままで、クライアント側を検証するための証明書はありません)。これは、サーバーで allowConnectionsWithoutCertificates オプションを指定することによって行われ、WebでのHTTPSの機能と機能的に同等です。

もちろん、もう1つのオプションは、サーバー証明書ではなくCA証明書を指すようにsslCAFileパスを修正することです。

1
Adam C