Надежно подключите приложение NodeJS к серверу MongoDB - PullRequest
0 голосов
/ 19 марта 2020

Итак, я недавно установил две капли DigitalOcean, одну с MongoDB, а другую с NodeJS обе на Ubuntu 18.04. Я настроил свой NodeJS безопасно и с доменом, отсортировал по HTTPS и, наконец, смог заставить его общаться с сервером MongoDB. Мой следующий шаг - сделать так, чтобы mongoose.connect было безопасным соединением с использованием ssl.

На моем сервере MongoDB я прошел этот процесс:

openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -sha256 -days 1095 -out ca.pem
openssl genrsa -out mongodb.key 2048
openssl req -new -key mongodb.key -out mongodb.csr -subj "/CN=127.0.0.1"
openssl x509 -req -in mongodb.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out mongodb.crt -days 1095 -sha256
cat mongodb.key mongodb.crt > mongodb.pem

Поскольку это было единственный учебник, который я использовал, который позволял мне все еще подключаться к моей оболочке mon go с помощью:

mongo -u username -p --authenticationDatabase admin --ssl --sslCAFile /etc/ssl/ca.pem --sslPEMKeyFile /etc/ssl/mongodb.pem

Теперь я извлек ключ ca.pem с этого сервера и вставил его На моем NodeJS сервере с scp я затем сослался на файл ca.pem из моего mongoose.connect примерно так:

URI String = DATABASE=mongodb://user:pwd@MONGO_IP:27017/?authSource=admin&readPreference=primary&appname=MongoDB%20Compass%20Community&ssl=true

setTimeout(async () => {
      console.log('Connecting to database...');
      await mongoose
        .connect(process.env.DATABASE, {
          useNewUrlParser: true,
          useFindAndModify: false,
          useCreateIndex: true,
          useUnifiedTopology: true,
          connectTimeoutMS: 5000,
          ssl: true,
          sslValidate: true,
          sslCA: fs.readFileSync('/etc/ssl/ca.pem'),
        })
        .then(() => {
          console.log('We are connected to the database');
        })
        .catch(err => {
          console.log('Could not connect to the database: ', err);
          connectWithTimeout();
        });
    }, 3000);

Из нескольких что я пробовал, я получаю одну из двух ошибок: MongooseServerSelectionError: self signed certificate in certificate chain или Hostname/IP doesn't match certificate's altnames: "IP: MONGO_IP is not in the cert's list: ".

Не совсем уверен, какой путь к go отсюда, я заглянул ко многим вещам, но к сожалению, я не смог разобраться со всем этим, я не уверен, что использую правильный файл для моего NodeJS для соединения или, возможно, что-то в моей строке URI, но это было нормально пока я не начал процедуру SSL, или я что-то упускаю полностью? Достаточно ли безопасен метод подключения с помощью этого шага?

Вся помощь будет go большим,

Спасибо.

1 Ответ

0 голосов
/ 20 марта 2020

Hostname/IP doesn't match

Имя хоста или IP-адрес сервера MongoDB, видимое сервером NodeJS, должно соответствовать теме сертификата или одному из альтернативных имен субъекта.

Поскольку вы создаете сертификат сервера с темой "CN=127.0.0.1", он не будет соответствовать удаленному соединению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...