#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"/>