2015-04-02 2 views
2

Я пытаюсь настроить mongodb 2.6.8 replicaset с помощью ssl. Я составил Монго вручную с поддержкой SSL и поддержкой SSL в моей конфигурации следующим образом:Включение ssl в mongodb replicaset без сертификатов

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. Вы создали его, объединив закрытый ключ и сертификат сервера; но он должен не содержит ключ. Это должна быть только возрастающая цепочка сертификатов, начиная с сервера и заканчивая корнем. Если сервер сам сертифицирован, тогда нет необходимости конкатенировать что-либо еще.
Смежные вопросы