无法通过 TCPS 将我的应用程序连接到 Amazon RDS oracle 数据库
Not able to connect my application to Amazon RDS oracle db over TCPS
大家好我正在尝试从我的点网应用程序连接 Oracle Db,但出现错误:
Network Transport: SSL failure in parsing wallet location
我的 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): Network Transport: SSL failure in parsing wallet location ---> OracleInternal.Network.NetworkException (0xFFFFE700): Network Transport: SSL failure in parsing wallet location
在 RDS 服务器端,我可以看到以下错误:
22-JUN-2021 17:58:23 (ADDRESS=(PROTOCOL=tcps)(HOST=46.19.253.127)(PORT=5526)) * 542
TNS-00542: SSL Handshake failed
TNS-12560: TNS:protocol adapter error
你能尝试将 TLS 连接调整到 1.2(或者如果 1.2 失败,降级到 1.1 等)
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
有时似乎错过了 RDS 的证书续订(AWS 的服务器端)。这是由多个用户报告的,有人猜测为什么会这样,可能是同时进行了一些数据库操作或网络问题。特别是在长时间运行的实例中,这似乎会发生。您可以尝试重新启动 RDS 服务,因为这会强制更新证书吗?还要确保客户端已安装并可用正确的加密 methods/libs。这是 Java envs 中的一个常见错误,不太确定这在 C#/.net 上有多重要另外一些版本不支持 AWS RDS 也不需要的 1.2。
还要确保 TLS 1.2 确实像 this thread
中一样正常工作
仅供将来参考回答我自己的问题..我使用基于文件的钱包而不是 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"/>
大家好我正在尝试从我的点网应用程序连接 Oracle Db,但出现错误:
Network Transport: SSL failure in parsing wallet location
我的 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): Network Transport: SSL failure in parsing wallet location ---> OracleInternal.Network.NetworkException (0xFFFFE700): Network Transport: SSL failure in parsing wallet location
在 RDS 服务器端,我可以看到以下错误:
22-JUN-2021 17:58:23 (ADDRESS=(PROTOCOL=tcps)(HOST=46.19.253.127)(PORT=5526)) * 542 TNS-00542: SSL Handshake failed TNS-12560: TNS:protocol adapter error
你能尝试将 TLS 连接调整到 1.2(或者如果 1.2 失败,降级到 1.1 等)
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
有时似乎错过了 RDS 的证书续订(AWS 的服务器端)。这是由多个用户报告的,有人猜测为什么会这样,可能是同时进行了一些数据库操作或网络问题。特别是在长时间运行的实例中,这似乎会发生。您可以尝试重新启动 RDS 服务,因为这会强制更新证书吗?还要确保客户端已安装并可用正确的加密 methods/libs。这是 Java envs 中的一个常见错误,不太确定这在 C#/.net 上有多重要另外一些版本不支持 AWS RDS 也不需要的 1.2。
还要确保 TLS 1.2 确实像 this thread
中一样正常工作仅供将来参考回答我自己的问题..我使用基于文件的钱包而不是 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"/>