Я пытаюсь настроить / добавить аутентификацию 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 без необходимости хранить пароль в открытом виде.
Пожалуйста, порекомендуйте.