Не удается подключить мое приложение к Amazon RDS oracle db через TCPS

#c# #.net #oracle #amazon-rds #oracle-wallet

Вопрос:

Привет всем, я пытаюсь подключить Oracle Db из моего приложения dot net, но я получаю ошибку:

Сетевой транспорт: сбой SSL при анализе местоположения кошелька

У меня есть все необходимые сертификаты в моем хранилище сертификатов Windows. моя строка подключения-это :

  <appSettings>
 <add key="IMConnectionString" value="Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=abc-prod-rds-01.cvi0vpnztsiw.eu-central-1.rds.amazonaws.com)(PORT=2484))(CONNECT_DATA=(SID=abcprod)) (SECURITY = (SSL_SERVER_CERT_DN = C=US,ST=Washington,L=Seattle,O=Amazon Web Services,OU=Amazon RDS,CN=Amazon RDS Root 2019 CA))); Password = *****;  User ID = ****"/>
 

моя конфигурация в app.config такова:

  <oracle.manageddataaccess.client>
<version number="*">
  <settings>
    <setting name="WALLET_LOCATION" value="(SOURCE = (METHOD = MCS))" />
    <setting name="TraceLevel" value="7" />
    <setting name="TraceOption" value="1" />
    <setting name="TraceFileLocation" value="C:trace" />
  </settings>
  <dataSources>
    <dataSource alias="SampleDataSource" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=2484))(CONNECT_DATA=(SERVICE_NAME=ORCL))) " />
  </dataSources>
</version>
 </oracle.manageddataaccess.client>
 

Я делаю вызов бд вот так:

  var queryExecutor = _executor.GetQueryExecutor(item.QueryDatabase);
 DataSet ds = queryExecutor.ExecuteQuery(item);
 

Пожалуйста, дайте мне знать, чего мне не хватает?

В ODP.NET следы также я получаю следующие следы:

Oracle.Управляемый процесс.Клиент.Исключение OracleException (0x80004005): Сетевой транспорт: сбой SSL при анализе местоположения кошелька —> OracleInternal.Сеть.Исключение сети (0xFFFFE700): Сетевой транспорт: сбой SSL при анализе местоположения кошелька

На стороне сервера RDS я вижу следующую ошибку:

22 ИЮНЯ 2021 года 17:58:23 (АДРЕС=(ПРОТОКОЛ=tcps)(ХОСТ=46.19.253.127)(ПОРТ=5526)) * 542 TNS-00542: Сбой SSL-подтверждения TNS-12560: TNS:ошибка адаптера протокола

Ответ №1:

Можете ли вы попробовать настроить TLS-соединение на 1.2 (или, если 1.2 выйдет из строя, понизить его до 1.1 и т. Д.)

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

Комментарии:

1. Должен ли я добавить это в свой код или конфигурацию?

2. В коде. Вы можете добавить его непосредственно перед var queryExecutor = _executor.GetQueryExecutor(item.QueryDatabase); строкой

3. Все еще получаю ту же ошибку, братан… пробовал как 1.2, так и 1.1

Ответ №2:

Иногда кажется, что продление сертификатов RDS пропущено (на стороне сервера AWS). Об этом сообщают несколько пользователей, и есть некоторые предположения, почему это так, возможно, некоторые операции с БД одновременно или проблемы с сетью. Особенно в длительных случаях это, похоже, происходит. Можете ли вы попытаться перезапустить службу RDS, так как это приведет к продлению сертификата? Также убедитесь, что у клиента установлены и доступны правильные методы/библиотеки шифрования. Это распространенная ошибка в Java env, не слишком уверенная в том, насколько это важно для C#/.net, Также некоторые версии не поддерживают 1.2, что не требуется AWS RDS.

Также убедитесь, что TLS 1.2 действительно работает нормально, как в этой теме

Ответ №3:

Просто для справки на будущее, Отвечая на мой собственный вопрос.. Я использовал кошелек на основе файлов вместо MCS, и он работал после добавления следующих настроек в мой файл app.config:

  <settings>
    <setting name="WALLET_LOCATION" value="(SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = C:appclientssl_wallet)))" />
    <setting name="TraceLevel" value="7" />
    <setting name="TraceOption" value="1" />
    <setting name="TraceFileLocation" value="D:trace" />
    <setting name="SSL_CLIENT_AUTHENTICATION" value="FALSE" />
    <setting name="SSL_VERSION" value="1.0" />
    <setting name="SSL_CIPHER_SUITES" value="(SSL_RSA_WITH_AES_256_CBC_SHA)" />
    <setting name="SSL_SERVER_DN_MATCH" value="NO" />
    <setting name="TNS_ADMIN" value="C:appclientclient_1ssl_wallet"/>