我尝试使用 SSL 证书通过 Oracle.ManagedDataAccess Nuget 包连接到 Amazon RDS 实例。
我可以使用 orapki 生成的钱包通过 SQL*Plus 成功连接。钱包生成如下AWS 说明
我想通过 C# 中的 Oracle.ManagedDataAccess 执行相同的操作,并且我正在尝试使用相同的钱包。
我的 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>
我收到 OracleExceptionOpen()
:
Oracle.ManagedDataAccess.Client.OracleException:'网络传输:
SSL 解析钱包位置失败'
有一个内部例外:
TCPS:无效的 SSL 钱包(魔法)
它肯定会找到并可以访问钱包文件,因为如果您将位置更改为无效的位置,您会得到不同的内部异常,例如:
DirectoryNotFoundException:找不到路径的一部分
'C:\ssl_wallet2\cwallet.sso'。
我找不到任何明显的证据来表明为什么该钱包应该无效,因为它已被 SQL*Plus 使用来成功连接到同一服务器。
Invalid SSL Wallet (Magic)
没有产生任何我能找到的相关内容。我在这种方法中缺少什么吗?
Edit:
您的堆栈跟踪可能包含:
在 System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob(Byte[] rawData,对象密码,X509KeyStorageFlags keyStorageFlags)
在 System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(Byte[] rawData,字符串密码,X509KeyStorageFlags keyStorageFlags)
在 OracleInternal.Network.TcpsTransportAdapter.Negotiate(ConnectionOption conOption)
在 OracleInternal.Network.OracleCommunication.DoConnect(字符串 tnsDescriptor)
在OracleInternal.Network.OracleCommunication.Connect(字符串tnsDescriptor,布尔doNAHandshake,字符串IName,ConnectionOption CO)
在 OracleInternal.ServiceObjects.OracleConnectionImpl.Connect(ConnectionString cs, Boolean bOpenEndUserSession, OracleConnection connRefForCriteria, String instanceName)System.ArgumentException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089Array 可能不为空或为 null。
参数名称:System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob 处的 rawData(Byte[] rawData, 对象密码, X509KeyStorageFlags keyStorageFlags)
在 System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(Byte[] rawData,字符串密码,X509KeyStorageFlags keyStorageFlags)
在 OracleInternal.Network.TcpsTransportAdapter.Negotiate(ConnectionOption conOption