我正在尝试使用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)
没有产生任何我所能找到的相关信息。这种方法有什么我想念的吗?
答案 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>
然后一切都会按预期进行。