gpt4 book ai didi

.net - Oracle.ManagedDataAccess 到 AWS RDS 数据库 - TCPS : Invalid SSL Wallet (Magic)

转载 作者:太空宇宙 更新时间:2023-11-03 13:00:13 32 4
gpt4 key购买 nike

我正在尝试使用 SSL 证书通过 Oracle.ManagedDataAccess Nuget 包连接到 Amazon RDS 实例。

我可以使用使用 orapki 生成的钱包通过 SQL*Plus 成功连接。关注AWS instructions生成的钱包

我想在 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>

我在 Open() 上得到一个 OracleException:

Oracle.ManagedDataAccess.Client.OracleException: 'Network Transport: SSL failure in parsing wallet location'

内部异常:

TCPS: Invalid SSL Wallet (Magic)

它肯定会找到并可以访问钱包文件,因为如果你将位置更改为无效的内容,你会得到不同的内部异常,例如:

DirectoryNotFoundException: Could not find a part of the path 'C:\ssl_wallet2\cwallet.sso'.

我找不到任何明显的证据表明为什么该钱包应该无效,因为它已被 SQL*Plus 成功连接到同一服务器。

Invalid SSL Wallet (Magic) 没有产生任何我能找到的相关信息。这种方法有什么我遗漏的吗?

编辑:

您的堆栈跟踪可能包含:

at System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob(Byte[] rawData, Object password, X509KeyStorageFlags keyStorageFlags) at System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(Byte[] rawData, String password, X509KeyStorageFlags keyStorageFlags) at OracleInternal.Network.TcpsTransportAdapter.Negotiate(ConnectionOption conOption) at OracleInternal.Network.OracleCommunication.DoConnect(String tnsDescriptor) at OracleInternal.Network.OracleCommunication.Connect(String tnsDescriptor, Boolean doNAHandshake, String IName, ConnectionOption CO) at OracleInternal.ServiceObjects.OracleConnectionImpl.Connect(ConnectionString cs, Boolean bOpenEndUserSession, OracleConnection connRefForCriteria, String instanceName)System.ArgumentException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089Array may not be empty or null. Parameter name: rawData at System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob(Byte[] rawData, Object password, X509KeyStorageFlags keyStorageFlags) at System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(Byte[] rawData, String password, X509KeyStorageFlags keyStorageFlags) at OracleInternal.Network.TcpsTransportAdapter.Negotiate(ConnectionOption conOption

最佳答案

原来orapki生成的钱包文件放在这里不合适。

解决方案是改用 Windows 证书存储来保存 RDS 证书颁发机构。

在这种情况下,您下载 PKCS7 file for RDS from AWS并将其导入 Windows 中受信任的根证书颁发机构。

然后您更改 app.config 以将您的钱包位置设置为 Microsoft 证书存储,如下所示:

<oracle.manageddataaccess.client>
<version number="*">
<settings>
<setting name = "WALLET_LOCATION" value="(SOURCE=(METHOD =MCS)) "/>
</settings>
</version>
</oracle.manageddataaccess.client>

然后一切都按预期进行。

关于.net - Oracle.ManagedDataAccess 到 AWS RDS 数据库 - TCPS : Invalid SSL Wallet (Magic),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52220070/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com