Назад | Перейти на главную страницу

Аутентификация сертификата MongoDB 3.4 x.509

Я пытаюсь настроить / добавить аутентификацию x.509 для защиты нашего приложения, созданного с помощью базы данных MongoDB 3.4. Я не хочу использовать аутентификацию на основе имени пользователя и пароля, чтобы не хранить пароль в файлах конфигурации.

Я создал ЦС и самозаверяющие сертификаты. Мои шаги ниже:

openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem
cp rootCA.pem  /etc/ssl/certs/
openssl genrsa -out mongodb.key 2048

openssl req -new -key mongodb.key -out mongodb.csr
openssl x509 -req -in mongodb.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out mongodb.crt -days 500 -sha256
cat mongodb.key mongodb.crt > mongodb.pem
cp mongodb.pem  /etc/ssl/certs/
systemctl restart mongod.service

В моей конфигурации mongo также есть следующие строки:

net:
  port: 27017
  bindIp: 0.0.0.0
  ssl:
    mode: requireSSL
    PEMKeyFile: /etc/ssl/certs/mongodb.pem
    CAFile: /etc/ssl/certs/rootCA.pem

Используя вышеуказанные шаги, я могу добраться до точки, где я могу войти в оболочку mongo с помощью: mongo --ssl --sslCAFile /etc/ssl/certs/rootCA.pem --sslPEMKeyFile /etc/ssl/certs/mongodb.pem --host <HOSTNAME>.

Однако для того, чтобы что-то сделать, мне также нужно создать пользователя для клиента. Я получил имя с openssl x509 -in /etc/ssl/certs/mongodb.pem -inform PEM -subject -nameopt RFC2253 затем попробуйте:

db.getSiblingDB("$external").runCommand(
  {
    createUser: "emailAddress=email@my-domain.com,CN=192.168.171.147,OU=Services,O=MyCompany,L=Odesa,C=UA=",
    roles: [
      { role: "readWrite", db: "admin" },
      { role: "userAdminAnyDatabase", db: "admin" }
    ]
  }
)

я получил "Cannot create an x.509 user with a subjectname that would be recognized as an internal cluster member.". Я где-то видел, что комбинация сертификатов OU, O должна быть уникальной. Возможно, это моя проблема. Мне даже не нужно поддерживать кластер, это просто способ защитить соединение MongoDB без необходимости хранить пароль в открытом виде.

Пожалуйста, порекомендуйте.