首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle.ManagedDataAccess到AWS RDS DB - TCPS:无效的SSL (魔术)

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

Stack Overflow用户
提问于 2018-09-07 09:58:12
回答 1查看 2.7K关注 0票数 2

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

我可以使用使用orapki生成的钱包成功地通过SQL*Plus连接。遵循AWS指令生成的钱包

我也想通过Oracle.ManagedDataAccessin C#做同样的事情,我也想用同样的钱包。

我的C#看起来是这样的:

代码语言:javascript
复制
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有我钱包的位置:

代码语言:javascript
复制
<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)

EN

回答 1

Stack Overflow用户

发布于 2018-09-07 11:04:42

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

解决方案是使用Windows证书存储来代替RDS证书颁发机构。

在本例中,您下载AWS中RDS的PKCS7文件并将其导入到Windows中受信任的根证书颁发机构中。

然后将app.config更改为将钱包位置设置为,如下所示:

代码语言:javascript
复制
<oracle.manageddataaccess.client>
    <version number="*">
      <settings>
        <setting name = "WALLET_LOCATION" value="(SOURCE=(METHOD =MCS)) "/>
      </settings>
    </version>
</oracle.manageddataaccess.client>

然后一切都如期而至。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52220070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档