Конфигурация Oracle Network Encryption с C# (ODP.Net) игнорируется

Я хочу подключиться к БД Oracle, используя ODP.Net и C# и используя зашифрованное соединение. Целевая БД на данный момент настроена на прием как зашифрованных, так и незашифрованных соединений. К сожалению, даже если настроен на прием только зашифрованных соединений, мой модульный тест всегда подключается к БД без шифрования.

Мой код выглядит следующим образом:

OracleConnection myConnection = new OracleConnection("Data Source=MyDataSource;User Id=userid; Password = ***");
myConnection.Open();

OracleCommand myStoredProcedureCall = new OracleCommand();
myStoredProcedureCall.Connection = myConnection;

//Some calls to an Oracle DB

У меня есть следующая конфигурация в моем app.config

<oracle.manageddataaccess.client>
  <version number="*">
    <dataSources>
      <dataSource alias="MyDataSource" descriptor="(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=hostname)(PORT=port)))(CONNECT_DATA=(SID=SID)(SERVER=DEDICATED))(SECURITY=(SSL_VERSION=1.2)(SSL_SERVER_CERT_DN=&quot;cn=CertDN&quot;)))" />
    </dataSources>
    <settings>
      <setting name="TraceLevel" value="7" />
      <setting name="TraceOption" value="0" />
      <setting name="TraceFileLocation" value="C:\Temp" />

      <setting name="TNS_ADMIN" value="<projectDir>\ExternalRefs\network\admin\productive" />
    </settings>
  </version>
</oracle.manageddataaccess.client>

Я также проверил, что другие записи в bapp.config установлены в соответствии с рекомендациями руководства по установке Oracle (см. Руководство по установке).

В моем sqlnet.ora у меня есть следующие записи:

# sqlnet.ora Network Configuration File
SSL_SERVER_DN_MATCH = yes
SSL_VERSION         = 1.2
sqlnet.encryption_types_client = (AES256)
sqlnet.encryption_client = required 

sqlnet.crypto_checksum_client = required 
sqlnet.crypto_checksum_types_client = (SHA1)

Согласно моему журналу трассировки этот файл и его значения конфигурации читаются.

Насколько я вижу, я сделал все, чтобы принудительно зашифровать соединение, но все равно оно не шифрует соединение. Однако также нет ошибки, но модульный тест просто использует незашифрованное соединение, игнорируя мою конфигурацию.

Следует упомянуть две вещи, которые не являются стандартными: a) Из-за сетевых ограничений мне не разрешили установить требуемые пакеты NuGet из онлайн-источника. Я загрузил их из Oracle, а затем просто установил их из файловой системы, но все еще с помощью диспетчера пакетов NuGet. Б) В руководстве по установке упоминается следующая запись, которую необходимо адаптировать:

<configuration>
  <connectionStrings>
    <add name="OracleDbContext" providerName="Oracle.ManagedDataAccess.Client" connectionString="User Id=oracle_user;Password=oracle_user_password;Data Source=oracle" />
  </connectionStrings>
</configuration>

Поскольку я предоставляю строку подключения, жестко запрограммированную в модульном тесте, я оставил эту строку без изменений, предполагая, что это не нужно.

Интересно, что значения конфигурации в sqlnet.ora, похоже, даже не проверены. Если я сконфигурирую несуществующий шифр (например, BlaBla вместо AES256), то ошибки все равно не будет. Кроме того, я пытался использовать разные варианты написания (верхний регистр вместо нижнего регистра) в sqlnet.ora, так как каждый найденный образец использует другие варианты написания.

Любая идея, что я мог бы проверить дальше, будет оценен:-)

0 ответов

Другие вопросы по тегам