Итак, я недавно установил две капли 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 большим,
Спасибо.