Тайм-аут подключения к AWS documentDb с включением ssl - PullRequest
1 голос
/ 05 апреля 2019

Я создаю новый кластер 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. Возможно проблема в разных зонах. Пример: кластер создан у нас-восток-2 и я пытаюсь подключиться из Украины. :)

UPD : Предположим, что я должен быть в одном VPC для подключения к кластеру DocumentDb.

Ответы [ 2 ]

1 голос
/ 16 апреля 2019

Моя проблема была в дизайне доступа к AWS DocumentDB. Дополнительная информация о доступе к базе данных из VPC .

1 голос
/ 16 апреля 2019

Я вижу пару вещей, на которые вы, возможно, захотите взглянуть:

...