我正在尝试使用SSL证书通过Oracle.ManagedDataAccess Nuget包连接到Amazon实例。
我可以使用使用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 on Open()
Oracle.ManagedDataAccess.Client.OracleException:‘网络传输:解析钱包位置的SSL失败’
除了一个内在的例外:
TCPS:无效SSL钱包(魔术)
它肯定会找到并能够访问钱包文件,因为如果您将位置更改为无效的东西,您将得到一个不同的内部异常,例如:
DirectoryNotFoundException:找不到路径'C:\ssl_wallet2\cwallet.sso‘的一部分。
我找不到任何显而易见的东西来说明为什么这个钱包应该无效,因为SQL*Plus已经使用它成功地连接到同一台服务器。
Invalid SSL Wallet (Magic)没有提供我能找到的任何相关信息。在这个方法中我遗漏了什么吗?
编辑:
您的堆栈跟踪可能包含:
在System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob(Byte[] rawData,对象密码,在System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(Byte[] rawData),字符串密码,X509KeyStorageFlags keyStorageFlags(在OracleInternal.Network.TcpsTransportAdapter.Negotiate(ConnectionOption conOption),在OracleInternal.Network.OracleCommunication.DoConnect(String tnsDescriptor ),在OracleInternal.Network.OracleCommunication.Connect(String tnsDescriptor),布尔doNAHandshake,String IName,doNAHandshake CO)在OracleInternal.ServiceObjects.OracleConnectionImpl.Connect(ConnectionString cs,Boolean,en20 20#,字符串instanceName)System.ArgumentException、mscorlib、Version=4.0.0.0、Culture=neutral、PublicKeyToken=b77a5c561934e089Array可能不是空的或空的。参数名称: System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob(Byte[] rawData处的rawData,System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(Byte[] rawData处的对象密码,X509KeyStorageFlags keyStorageFlags,OracleInternal.Network.TcpsTransportAdapter.Negotiate(ConnectionOption conOption处的字符串密码,X509KeyStorageFlags keyStorageFlags)
发布于 2018-09-07 11:04:42
原来由orapki生成的钱包文件在这里不合适。
解决方案是使用Windows证书存储来代替RDS证书颁发机构。
在本例中,您下载AWS中RDS的PKCS7文件并将其导入到Windows中受信任的根证书颁发机构中。
然后将app.config更改为将钱包位置设置为,如下所示:
<oracle.manageddataaccess.client>
<version number="*">
<settings>
<setting name = "WALLET_LOCATION" value="(SOURCE=(METHOD =MCS)) "/>
</settings>
</version>
</oracle.manageddataaccess.client>然后一切都如期而至。
https://stackoverflow.com/questions/52220070
复制相似问题