当前位置: 首页 > 知识库问答 >
问题:

Oracle.ManagedDataAccess to AWS RDS DB - TCPS: 无效的 SSL 钱包 (Magic)

陆俊捷
2023-03-14

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

我可以使用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>

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

“网络传输:解析钱包位置时SSL失败”

有一个内部例外:

TCPS:无效的SSL钱包(魔法)

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

DirectoryNotFoundException:找不到路径“C:\ssl_wallet2\cwallet.sso”的一部分。

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

无效的SSL钱包(魔法)不会产生我能找到的任何相关内容。在这种方法中我缺少什么吗?

编辑:

您的堆栈跟踪可能包含:

位于System.Security.Cryptography.X509Certificates.X509证书。System.Security.Cryptography.X509Certificates.X509 Certificate2..ctor(Byte[]rawData,String password,X509KeyStorageFlags keyStorageFlgs)处的LoadCertificate FromBlob(Byte[]raw数据,对象密码,X509 keyStorageFlags keystorageFlag)(OracleInternal.Network.TcpsTransportAdapter处的Byte[]rawData、String密码,X409KeyStorage Flag。在OracleInternal.Network.OracleCommunication协商(ConnectionOption conOption)。OracleInternal.Network.OracleCommunication上的DoConnect(字符串tnsDescriptor)。在OracleInternal.ServiceObjects.OracleConnectionImpl上连接(字符串tnsDescriptor、布尔doNAHandshake、字符串IName、ConnectionOption CO)。连接(ConnectionString cs、Boolean bOpenEndUserSession、OracleConnection connRefForCriteria、String instanceName)系统。ArgumentException,mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089Array不能为空或null。参数名称:rawData at System.Security.Cryptography.X509Certificates.X509证书。System.Security.Cryptography.X509Certificates.X509 Certificate2..ctor(Byte[]rawData,String password,X509KeyStorageFlags keyStorageFlgs)处的LoadCertificate FromBlob(Byte[]raw数据,对象密码,X509 keyStorageFlags keystorageFlag)(OracleInternal.Network.TcpsTransportAdapter处的Byte[]rawData、String密码,X409KeyStorage Flag。协商(ConnectionOption conOption

共有1个答案

纪晨
2023-03-14

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

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

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

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

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

然后一切按预期运行。

 类似资料:
  • 比特币钱包的实质是私钥收集器。这些私钥被存到一个文件中,甚至可以打印到一片纸上。 Private Key Formats 私钥格式 私钥是用于从一个特定的地址上解锁出satoshis。在比特币技术体系中,一个私钥的标准格式是一个256位的数字, 在下面的数值之间: 0x1 and 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A0

  • TokenPocket钱包 https://github.com/MOACChain/moac-core 点击进入上面网址后,点击wallets进入。  TokenPocket 是一款移动端轻钱包APP,它旨在为普通用户提供一款安全放心、简单好用、功能强大的数字资产钱包应用,使用起来非常流畅,也符合国内用户的使用习惯,全中文界面,适合新手使用。 另外这款钱包整合了多体系数字资产可供选择和存放(

  • 在比特币的链上,实际上并没有账户的概念,某个用户持有的比特币,实际上是其控制的一组UTXO,而这些UTXO可能是相同的地址(对应相同的私钥),也可能是不同的地址(对应不同的私钥)。 出于保护隐私的目的,同一用户如果控制的UTXO其地址都是不同的,那么很难从地址获知某个用户的比特币持币总额。但是,管理一组成千上万的地址,意味着管理成千上万的私钥,管理起来非常麻烦。 能不能只用一个私钥管理成千上万个地

  • 1 基本概念 1.1 什么是账户? 一个钱包地址就代表着一个账户。地址是账户的标识。地址表示的是该账户公钥的后20字节(通常会以0x开头,例如,0xed37f755e56b1d49642dce8ff2b788ae33263c94`)。每个账户都由一对钥匙定义,一个私钥(Private Key)和一个公钥(Public Key)。 账户以地址为索引,地址由公钥衍生而来,取公钥的最后20个字节。 1.

  • HD钱包算法决定了只要给定根扩展私钥,整棵树的任意节点的扩展私钥都可以计算出来。 我们来看看如何利用bitcoinjs-lib这个JavaScript库来计算HD地址: const bitcoin = require('bitcoinjs-lib'); ---- let xprv = 'xprv9s21ZrQH143K4EKMS3q1vbJo564QAbs98BfXQME6nk8UCrnX

  • 我是OracleDB的新手。我正在研究在不提供用户名和密码的情况下将客户端应用程序连接到服务器上的Oracle DB。我的理解是正确的,这可以通过使用钱包来实现吗?我用我的笔记本电脑作为客户端和服务器来测试这一点。 我使用为客户端和服务器端创建钱包,如下所示: 将证书从一侧装入另一侧的钱包。 显示钱包会得到以下结果: 我从上面了解到,服务器和客户端现在相互信任,因此有利于建立连接。 服务器设置文件