我正在尝试使用 SSL 证书通过 Oracle.ManagedDataAccess Nuget 包连接到 Amazon RDS 实例。
我可以使用使用 orapki 生成的钱包通过 SQL*Plus 成功连接。按照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)
没有产生任何我能找到的相关内容。这种方法有什么我遗漏的吗?
编辑:
您的堆栈跟踪可能包含:
Culture=neutral, PublicKeyToken=b77a5c561934e089Array 不能为空或 null。参数名称: System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob(Byte[] rawData, Object password, X509KeyStorageFlags keyStorageFlags) at System.Security.Cryptography.X509Certificates.X509Certificate2.X509Certificate2..ctor(Byte[] rawData, String password, X509KeyStorageFlags keyStorageFlags) 在 OracleInternal.Network.TcpsTransportAdapter.Negotiate(ConnectionOption conOption