Oracle.ManagedDataAccess для AWS RDS DB - TCPS: неверный кошелек SSL (магия) - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь подключиться к экземпляру Amazon RDS через пакет Nuget Oracle.ManagedDataAccess с использованием сертификата SSL.

Я могу успешно подключиться через SQL * Plus, используя кошелек, созданный с помощью orapki. Кошелек, созданный в соответствии с инструкциями AWS

Я хочу сделать то же самое через Oracle.ManagedDataAccessin C #, и я пытаюсь использовать тот же кошелек.

Мой C # выглядит так:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Oracle.ManagedDataAccess.Client;

namespace OracleDataAccess
{
    class Program
    {
        static void Main(string[] args)
        {
            var connectionString = @"USER ID=***;PASSWORD=***;DATA SOURCE=(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCPS)(HOST = ***) (PORT = 2484)))(CONNECT_DATA = (SID = ***))   (SECURITY = (SSL_SERVER_CERT_DN = C=US,ST=Washington,L=Seattle,O=Amazon.com,OU=RDS,CN=***)))";
            var connection = new OracleConnection(connectionString);
            connection.Open();
        }
    }
}

В моем app.config указан мой кошелек:

<oracle.manageddataaccess.client>
    <version number="*">
      <settings>
        <setting name = "WALLET_LOCATION" value="(SOURCE=(METHOD =FILE)(METHOD_DATA=(DIRECTORY=C:\ssl_wallet))) "/>
      </settings>
    </version>
</oracle.manageddataaccess.client>

Я получаю OracleException на Open():

Oracle.ManagedDataAccess.Client.OracleException: 'Сетевой транспорт: Ошибка SSL при разборе местоположения кошелька '

С внутренним исключением:

TCPS: неверный кошелек SSL (магия)

Он определенно находит и может получить доступ к файлу кошелька, потому что если вы измените местоположение на что-то недопустимое, вы получите другое внутреннее исключение, например ::

DirectoryNotFoundException: не удалось найти часть пути 'C: \ ssl_wallet2 \ cwallet.sso'.

Я не могу найти ничего очевидного, чтобы предположить, почему этот кошелек должен быть недействительным, поскольку он использовался SQL * Plus для успешного подключения к тому же серверу.

Invalid SSL Wallet (Magic) не дает ничего значимого, что я могу найти. Есть ли что-то, что мне не хватает в этом подходе?

1 Ответ

0 голосов
/ 07 сентября 2018

Оказывается, что файл кошелька, сгенерированный orapki, здесь не подходит.

Решение состоит в том, чтобы вместо этого использовать хранилище сертификатов Windows для хранения центра сертификации RDS.

В этом случае вы загружаете файл PKCS7 для RDS из AWS и импортируете его в свои доверенные корневые центры сертификации в Windows.

Затем вы изменяете app.config, чтобы в качестве местоположения кошелька указывалось хранилище сертификатов Microsoft, например:

<oracle.manageddataaccess.client>
    <version number="*">
      <settings>
        <setting name = "WALLET_LOCATION" value="(SOURCE=(METHOD =MCS)) "/>
      </settings>
    </version>
</oracle.manageddataaccess.client>

И тогда все работает как положено.

...