2015-04-02 141 views
2

我正在嘗試使用ssl設置mongodb 2.6.8 replicaset。我手動編譯蒙戈支持SSL和我的配置啓用了SSL如下:在沒有證書的情況下在mongodb replicaset中啓用ssl

sslMode=requireSSL 
sslPEMKeyFile=/etc/ssl/mongodb.pem 
sslCAFile=/etc/ssl/client.pem 
sslWeakCertificateValidation=true 
replSet=rs0 

我創建了mongodb.pem和client.pem文件BU運行OpenSSL的每臺服務器上,如下所示:

# openssl req -new -x509 -days 365 -nodes -out mongodb-cert.crt -keyout mongodb-cert.key -subj '/C=US/ST=MA/L=Waltham/CN=<fully qualified domain name>' 
# cat mongodb-cert.key mongodb-cert.crt > mongodb.pem 
# openssl req -new -x509 -days 365 -nodes -out client-cert.crt -keyout client-cert.key -subj '/C=US/ST=MA/L=Waltham/CN=<fully qualified domain name>' 
# cat client-cert.key client-cert.crt > client.pem 

在每個服務器上,我可以確認證書和SSL是每個我的服務器我可以做以下的工作,因爲:

mongo --ssl --sslPEMKeyFile=/etc/ssl/client.pem --sslCAFile=/etc/ssl/mongodb.pem <fully qualified domain name> 

滴我到蒙戈外殼。

在主節點上,我可以做rs.initiate()和rs.status(),它看起來很好:

> rs.initiate() 
{ 
    "info2" : "no configuration explicitly specified -- making one", 
    "me" : "<fqdn node 1>:27017", 
    "info" : "Config now saved locally. Should come online in about a minute.", 
    "ok" : 1 
} 
> rs.status() 
{ 
    "set" : "rs0", 
    "date" : ISODate("2015-04-02T20:25:27Z"), 
    "myState" : 1, 
    "members" : [ 
     { 
      "_id" : 0, 
      "name" : "<fqdn node 1>:27017", 
      "health" : 1, 
      "state" : 1, 
      "stateStr" : "PRIMARY", 
      "uptime" : 23, 
      "optime" : Timestamp(1428006318, 1), 
      "optimeDate" : ISODate("2015-04-02T20:25:18Z"), 
      "electionTime" : Timestamp(1428006318, 2), 
      "electionDate" : ISODate("2015-04-02T20:25:18Z"), 
      "self" : true 
     } 
    ], 
    "ok" : 1 
} 

然而,當我嘗試添加第二個成員,我得到了可怕的13144錯誤:

rs0:PRIMARY> rs.add("<fqdn node 2>:27017") 
{ 
    "errmsg" : "exception: need most members up to reconfigure, not ok : <fqdn node 2>:27017", 
    "code" : 13144, 
    "ok" : 0 
} 

我也應該注意到,在兩臺主機之間的連接工作正常,即,當節點1:

mongo --ssl --host <fqdn node 2> 

或同時在節點2上:

mongo --ssl --host <fqdn node 1> 

都有效。

如何將ssl選項和/或證書傳遞給rs.add()命令?

我實際上不關心傳遞證書(這就是爲什麼我指定sslWeakCertificateValidation = true);我更關心確保節點之間的通信是在SSL中。

回答

0

這是很難確定什麼是錯的,但我有幾點看法:

  1. 你可能已經得到了錯誤,如果其他mongod的過程是在其配置開始沒有replSet=rs0項目
  2. 您可能有錯誤,因爲服務器無法通過端口27017進行通信,例如如果防火牆阻止他們。在每臺服務器上,通過連接mongo客戶端到另一臺服務器來驗證連接是值得的。
  3. 您的mongod.pem文件存在問題。您已經通過連接服務器的私鑰和證書來創建它;但它應該包含密鑰而不是。它應該只是一個遞增的證書鏈,從服務器開始到根結束。如果服務器是自我認證的,那麼不需要連接其他任何東西。
相關問題