3

大家好,我正在尝试从我的 dot net 应用程序连接 Oracle Db,但出现错误:

网络传输:解析钱包位置的 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.ManagedDataAccess.Client.OracleException (0x80004005):网络传输:解析钱包位置时 SSL 失败 ---> OracleInternal.Network.NetworkException (0xFFFFE700):网络传输:解析钱包位置时 SSL 失败

在 RDS 服务器端,我可以看到以下错误:

2021 年 6 月 22 日 17:58:23(地址 =(协议 = tcps)(主机 = 46.19.253.127)(端口 = 5526))* 542 TNS-00542:SSL 握手失败 TNS-12560:TNS:协议适配器错误

4

3 回答 3

0

您可以尝试将 TLS 连接调整到 1.2(或者如果 1.2 失败,则降级到 1.1 等)

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

于 2021-06-16T04:04:54.540 回答
0

有时似乎错过了 RDS 的证书更新(AWS 的服务器端)。这是由多个用户报告的,并且有人猜测为什么会出现这种情况,可能是同时进行一些数据库操作或网络问题。尤其是在长时间运行的实例上,这似乎会发生。您是否可以尝试重新启动 RDS 服务,因为这会强制更新证书?还要确保客户端安装了正确的加密方法/库并且可用。这是 Java 环境中的一个常见错误,不太确定这在 C#/.net 上的重要性还有一些版本不支持 AWS RDS 也不需要的 1.2。

还要确保 TLS 1.2 真的像在这个线程中一样工作正常

于 2021-06-28T10:00:19.523 回答
0

仅供将来参考回答我自己的问题.. 我使用基于文件的钱包而不是 MCS,并且在我的 app.config 文件中添加以下设置后它起作用了:

 <settings>
    <setting name="WALLET_LOCATION" value="(SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = C:\app\client\ssl_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:\app\client\client_1\ssl_wallet"/>
于 2021-07-09T06:22:11.947 回答