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

时间:2018-09-07 09:58:12

标签: .net oracle ssl amazon-rds oracle.manageddataaccess

我正在尝试使用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:'网络传输:   解析钱包位置时SSL失败'

内部有例外:

  

TCPS:无效的SSL电子钱包(魔术)

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

  

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

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

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

1 个答案:

答案 0 :(得分:2)

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

然后一切都会按预期进行。