Я создаю новый кластер documentDb в AWS и пытаюсь подключиться к моему приложению net.core с помощью MongoDriver. Кластер с включенным свойством SSL.
Согласно этот вопрос и ответы Я испробовал несколько способов достижения своей цели.
- Импортировать цепочку сертификатов в хранилище локального компьютера в доверенные корневые центры сертификации rds-комбинированный-ca-bundle.p7b;
- Прочтите файл pem и создайте сертификат в коде для C # или используйте его в mongoShell с параметром
--sslCAFile
.
var clientSetting = MongoClientSettings.FromUrl("mongodb://<myloging>:<mypassword>@<myclusterendpoint>/?ssl=true&replicaSet=rs0");
var setting = new MongoClientSettings()
{
Server = clientSetting.Server,
UseSsl = clientSetting.UseSsl,
Credential = clientSetting.Credential,
GuidRepresentation = GuidRepresentation.CSharpLegacy,
ReadPreference = new ReadPreference(ReadPreferenceMode.Primary),
VerifySslCertificate = true,
SslSettings = new SslSettings
{
ClientCertificates = new List<X509Certificate2>()
{
new X509Certificate2("<path>\\rds-combined-ca-bundle.pem")
},
EnabledSslProtocols = System.Security.Authentication.SslProtocols.Default,
CheckCertificateRevocation = true
},
ReplicaSetName = clientSetting.ReplicaSetName
};
setting.SslSettings.ClientCertificateSelectionCallback = (sender, host, certificates, certificate, issuers) => setting.SslSettings.ClientCertificates.ToList()[0];
setting.SslSettings.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => true;
setting.MaxConnectionIdleTime = new TimeSpan(0, 0, 30);
client = new MongoClient(setting);
И сделайте так:
var filter = new BsonDocument("name", "mycollection");
var collectionCursor = client.GetDatabase("mydatabase").ListCollections(new ListCollectionsOptions { Filter = filter });
if (!collectionCursor.Any())
{
throw new Exception("Collection not found");
}
Я ожидаю, что получу коллекцию с исключением имени mycollection
или Collection not found
, но получаю
A timeout occured after 30000ms selecting a server using CompositeServerSelector{ Selectors = MongoDB.Driver.MongoClient+AreSessionsSupportedServerSelector, LatencyLimitingServerSelector{ AllowedLatencyRange = 00:00:00.0150000 } }. Client view of cluster state is { ClusterId : "1", ConnectionMode : "ReplicaSet", Type : "ReplicaSet", State : "Disconnected", Servers : [{ ServerId: "{ ClusterId : 1, EndPoint : "Unspecified/<myclusterendpoint>" }", EndPoint: "Unspecified/<myclusterendpoint>", State: "Disconnected", Type: "Unknown" }] }.
Та же проблема при попытке подключения через MongoShell. Может проблема в разных зонах. Пример: кластер создан в us-east-2 и я пытаюсь подключиться из Украины. :)
UPD: предположим, что я должен находиться в одном VPC для подключения к кластеру DocumentDb.