Oracle.ManagedDataAccess 到 AWS RDS DB - TCPS:无效的 SSL 钱包(魔术)

2023-12-08

我尝试使用 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


事实证明,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>

然后一切都按预期进行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Oracle.ManagedDataAccess 到 AWS RDS DB - TCPS:无效的 SSL 钱包(魔术) 的相关文章

随机推荐

  • 如何从webview中获取html内容?

    从 webview 获取 html 代码的最简单方法是什么 我尝试了stackoverflow和google的几种方法 但找不到确切的方法 请说一下具体的方法 public class htmldecoder extends Activit
  • 构造函数中的依赖注入容器

    为什么将容器放在构造函数中这么糟糕 例如 您想要在另一个类 C 的构造函数中解析类 B 因为您需要将类 B 与解析的依赖项一起使用 您开始按照您希望的方式使用类 C 就像使用 B 一样 但使用依赖关系已解决 为什么将容器放在构造函数中这么糟
  • 从嵌入的 Google 表格中删除 Google 边框

    我希望将 Google 表格嵌入到 Google 扩展程序中 足够简单 只需使用自动生成的嵌入代码并将其粘贴到 html 文件中即可 这就是我所做的
  • iOS otool 检测私有 api [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 我是第一次 ios 开发人员 找不到任何有关私有 ap
  • 为什么在 JavaScript 中“Object instanceof Function”和“Function instanceof Object”都返回 true?

    为什么在 JavaScript 中同时执行这两项操作Object instanceof Function and Function instanceof Object return true 我在 Safari WebInspector 中
  • 詹金斯在失败的阶段继续管道

    我有一个带有一堆管道的詹金斯设置 我编写了一个新的管道 可以立即启动所有管道 我想建造其他阶段 即使其中一个阶段失败了 目前的脚本看起来像这样 stage CentOS6 build centos6 testing stage CentOS
  • Nokogiri 可以解释 javascript 吗? - 网页抓取

    我们正在尝试抓取此页面上的可用性 http www equityapartments com new york new york city apartments midtown west mantena apartments aspx 我需
  • 增加 FD_SETSIZE 的限制并选择

    我想增加我的系统的 FD SETSIZE 宏值 有没有办法增加 FD SETSIZE 这样 select 就不会失败 按照标准 没有办法增加FD SETSIZE 一些程序和库 例如 libevent 尝试通过为fd set对象并传递大于的值
  • MongoDB 基于每个元素对多个文档中的数组求和

    我有以下文档结构 针对此示例进行了简化 id ObjectId sdfsdf result 1 3 5 7 9 id ObjectId asdref result 2 4 6 8 10 我想得到这些的总和result数组 但不是总和 而是一
  • RubyMine 的运行配置导致 Ubuntu 上出现“Yarn 需要 Node.js 4.0”错误

    在我的 Elementary OS 机器 基于 Ubuntu 的操作系统 上 使用以下命令创建新的 Ruby on Rails 项目后rails new yarntest并将其加载到 RubyMine 中 我无法使用 RubyMine 的
  • 静态全局和本地标识符的隐藏

    以下程序是在课堂上分发的练习工作表上的 我们被要求提供它的输出 但根据我对链接的理解 file2 c 不应该有两个静态标识符 b 的实例 但程序编译时会出现警告并运行得很好 我的问题是 为什么允许这样做 我认为静态链接的要点是能够访问该文件
  • JMeter JSR 223 语言 js 与 javascript

    关于 JSR 223 采样器语言 我可以选择 javascript ECMAScript ECMA 262 第 51 版 Oracle Nashorn 1 8 0 144 and Node js ECMAScript ECMA 262 版本
  • ios - 混合 MIDI 文件,每个文件都有自己的声音字体

    我正在寻找一种方法来混合 2 个或更多 MIDI 文件 每个文件都有自己的声音字体文件 我找到了一个文件的以下代码 并尝试做多个音乐播放器 但我想这不应该是正确的方法 而且我每秒都会听到一些奇怪的流行声音 那么有没有其他方法 也许没有音乐播
  • 如何唯一化元组元素?

    我有一个字典结果元组 result name xxx score 120L name xxx score 100L name yyy score 10L 我想将其统一 统一操作后result name xxx score 120L name
  • 通过清除内存违规来中止而不是段错误

    我在处理 C 字符串时遇到了这种奇怪的行为 这是 K R 书中的一个练习 我应该编写一个函数 将一个字符串附加到另一个字符串的末尾 这显然要求目标字符串分配足够的内存 以便源字符串适合 这是代码 strcat Copies contents
  • jQuery - 可以将背景图像调整为设定大小吗?

    我现在的情况是 我迫切需要将 div 的背景图像调整到一定的大小 有谁知道这是否可以用 jQuery 实现 我知道它需要的大小 它不必随着 div 的大小而调整大小 35 000 张图像已缩放到错误的尺寸 并且需要上线 因此无法调整图像大小
  • 新应用程序上的 Windows Phone 8 错误

    我正在使用 Visual Studio 2012 n Windows 8 企业版创建 Windows Phone 8 应用程序 当我创建一个新的应用程序并想运行它只是为了看看它是否有效时 会立即弹出此错误 System NullRefere
  • 现代计算机的堆栈和堆空间

    当用 C 语言编写时 如何知道启动程序时内存中有多少可用堆栈空间 堆空间怎么样 我如何知道程序执行期间使用了多少内存 这都是 Win32 特定的 不是真正 C 特定的 只是操作系统 API 创建线程时 默认情况下它会获得 1MB 堆栈空间
  • 在 AOSP 中启动时运行 shell 脚本

    我在我的项目中使用 iMX 8 Mini EVK 我从 AOSP 为该板构建 Android 9 0 现在我想在启动时运行一个脚本 我做了以下文件更改 但仍然面临问题 文件 Android AOSP build device fsl imx
  • Oracle.ManagedDataAccess 到 AWS RDS DB - TCPS:无效的 SSL 钱包(魔术)

    我尝试使用 SSL 证书通过 Oracle ManagedDataAccess Nuget 包连接到 Amazon RDS 实例 我可以使用 orapki 生成的钱包通过 SQL Plus 成功连接 钱包生成如下AWS 说明 我想通过 C