2016-07-24 12 views
6

それがシャットダウンする前に、パースのサーバーをオフに移行する過程で、私はデジタル海の上に簡単なのMongoDBインスタンスを設定しようとしています。 (私のニーズは非常に限られているので、私はmLabの代わりにそれを使用しています - 数MBのストレージ、数百のリクエストを1週間に - そしてそのmLabのコストはかなり高いです)。解析+のMongoDBの+ SSL:「ピアによって提供なしSSL証明書」

私はmongodを持っています実行して、Let's Encryptを使ってthis guideを使ってSSLを使っていくつかの進歩を遂げましたが、今は止まっています。パースの移行ツールは「ありませんが到達可能なサーバ」を、言わないと私は、このようなコマンドラインに接続しようとします

MongoDB shell version: 3.2.7 
connecting to: mydb.myhost.com:27017/dbname 
2016-07-24T10:31:38.814-0700 E QUERY [thread1] Error: network error while attempting to run command 'isMaster' on host 'mydb.myhost.com:27017' : 
[email protected]/mongo/shell/mongo.js:231:14 
@(connect):1:6 

exception: connect failed 

サーバーのログレポート:

mongo --ssl -u editAdmin -p "<password-here>" --host mydb.myhost.com dbname 

私はこのエラーを取得します

2016-07-24T13:32:44.357-0400 I NETWORK [initandlisten] connection accepted from 12.345.67.89:33351 #39 (1 connection now open) 
2016-07-24T13:32:44.390-0400 E NETWORK [conn39] no SSL certificate provided by peer; connection rejected 
2016-07-24T13:32:44.390-0400 I NETWORK [conn39] end connection 12.345.67.89:33351 (0 connections now open) 

クライアントが証明書を提供する必要があることを示唆していますが、(a)提供方法はわかりませんし、(b)パーズではオプションとして提供していないため、ではない。

ご協力いただきありがとうございます。

答えて

0

あなたしているコマンドは、SSLオプションを使用している(と私は解析が同じことをやっていると仮定)あなたはSSLを使用して接続しようとしています。 SSLを使用する場合、クライアントは証明書を提供する必要があります。 https://docs.mongodb.com/manual/tutorial/configure-ssl-clients/このリンクは、これを行う方法を説明し、具体的にあなたの問題についても言及しています。

+0

"SSLを使用する場合、クライアントは証明書を提供する必要があります" - これは常に正しいですか?設定によって異なります。SSLを設定するためのmongodbチュートリアルmongod says: "クライアントが証明書を提示する場合、証明書は有効な証明書でなければなりません。証明書を提示していないものを含め、すべての接続はSSLを使用して暗号化されています」 ソース:https://docs.mongodb.com/manual/tutorial/configure-ssl/ – DukeOf1Cat

5

をので、同じマシン上で動作する唯一の構文解析サーバがこのDBにアクセスする - ..私は、SSL証明書なしでのMongoDB接続を使用して、あなたをお勧めしますし、それにlocalhostのみクエリを許可しますone:

no SSL certificate provided by peer; connection rejected 

MongoDBでTLS/SSLを有効にすると、 MongoDBのクライアントが今のMongoDBサーバは、それはあなたがどの示すために、MongoDBのクライアントに提供し、パブリック認証局の証明書に対して、(mongod.confファイル内PEMKeyFileプロパティで指定された)のMongoDBのTLS/SSL証明書を比較することであることを主張する人であることを認証することができます信頼する認証局。

しかし、私は今説明し片道 TLSいつか-と呼ばれ、一方では、デフォルトでは、MongoDBは双方向または相互TLS認証を可能にします。この背後にある考え方は、多分にMongoDBは誰も(パブリックWebサイトがかもしれない道)からクライアントを受け入れることを望んでいないということですが、同様にクライアントを認証したいと考えています。

TLS相互認証では、上記の同じ認証局がクライアント証明書を発行し、MongoDBサーバーはクライアントの証明書を確認して、実際に認証局が発行したものであることを確認します(例:hasn ' t期限切れ)。

ので、このエラーはねえ、私は私のクライアントは、TLS証明書を提示することを期待する」と言っているが、あなたは何を提示していません。「それを修正するために

方法がConfigure mongod and mongos for TLS/SSLに記載されています。もちろん

If you want to bypass validation for clients that don’t present certificates, include the allowConnectionsWithoutCertificates run-time option with mongod and mongos. If the client does not present a certificate, no validation occurs. These connections, though not validated, are still encrypted using SSL.

、あなたにもmongod.confファイルでこれを指定することができますhttps://docs.mongodb.com/manual/reference/configuration-options/#net.ssl.allowConnectionsWithoutCertificates

私の好適な解決策は、次のようになります。

net: 
    port: 27017 
    bindIp: 172.0.0.1 # Set this to whatever your private IP address is 
    ssl: 
    mode: "requireSSL" 
    PEMKeyFile: "/path/to/tls/private/key" 
    CAFile: "/path/to/ca/public/cert" 
    disabledProtocols: "TLS1_0,TLS1_1" 
    allowConnectionsWithoutCertificates: true # <-- The line to add to your config