我想使用 ODP.Net 和 C# 并使用加密连接连接到 Oracle DB。目前目标数据库设置为接受加密和未加密的连接。不幸的是,即使配置为只接受加密的连接,我的单元测试也总是连接到没有加密的数据库。
我的代码如下所示:
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="cn=CertDN")))" />
</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-Packages。我从 Oracle 下载了它们,然后只是从文件系统安装了它们,但仍然使用 NuGet 包管理器 b) 安装指南提到了以下必须修改的条目:
<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 中使用不同的拼写(大写而不是小写),因为我发现的每个样本似乎都使用其他拼写。
任何想法我可以进一步检查将不胜感激:-)