托管Oracle ODP.NET驱动程序是否使用网络加密?

时间:2014-03-04 19:11:18

标签: .net oracle encryption odp.net

我最近读到Oracle支持Oracle客户端和服务器之间的网络加密。我假设如果服务器支持这一点,客户端可以在各种Oracle数据访问提供程序库中使用的完整Oracle客户端驱动程序中完成连接。

但是,我的应用程序使用的是Oracle中更独立的Managed ODP.NET驱动程序,它不需要完整的Oracle客户端安装。有谁知道这个驱动程序是否支持网络加密?

This page似乎提供了建议,但没有特别提出托管ODP.NET驱动程序。

并且this unanswered thread似乎表明它不受支持。如果是这样的话,连接会完全失败吗?在我通过这个问题进行试验和错误之前,我希望找到一些明确的文档。

3 个答案:

答案 0 :(得分:3)

Oracle刚刚(2015年10月)发布了 ODAC 12c Release 4

Release announcement

这包括最新的 Oracle托管数据访问提供程序,它现在支持网络数据加密(NDE)。

(自2015年10月14日起,Odp.Net Managed lib尚未推送至NuGet软件包存储库)。

自2015年10月15日起,NupetNet托管服务提供商第4版软件包现已在NuGet软件包存储库中提供。

请注意,由于此NDE功能是 ASO 的一部分,因此您需要拥有Oracle Enterprise License才能在生产中使用它。

Connecting to an Oracle DB using NDE

Configuring NDE

答案 1 :(得分:1)

cue sad music

在驱动程序的自述文件中找到答案。 (位于下载档案中的\odp.net\doc\readme.htm

  

ASO加密(ODP.NET,托管驱动程序) - 不支持   Oracle Advanced Security Option(ASO)加密。设置   SQLNET.ENCRYPTION_SERVER不支持“必需”,导致   客户端连接建立失败。没有设定   SQLNET.ENCRYPTION_SERVER或将其设置为任何其他有效值   支撑。

答案 2 :(得分:1)

Oracle的反馈网站(在登录墙后面)有一个请求,要求为纯.NET驱动程序添加加密支持:

https://apex.oracle.com/pls/apex/f?p=18357:39:115851408950026

  • 标题:使用托管驱动程序支持Oracle Advanced Security Option(ASO)加密
  • 说明:我们(这里是奥斯陆大学)无法使用新的托管驱动程序,因为我们通常在Linux(通常是虚拟机)上使用加密通信运行Oracle,这似乎不受支持当前完全托管的驱动(它适用于非托管驱动程序)。在这个时代,加密往往是一个有吸引力的选择,所以请在新的托管驱动程序中添加对此的支持。 :)
  • 评论:可在ODAC 12c第4版或更高版本中使用
  • 状态:正在制作中的功能

当服务器配置为需要加密时,使用Oracle纯托管驱动程序的.NET客户端将无法连接神秘:

  

ORA-12570 :网络会话:意外的数据包读取错误

在Oracle网络驱动程序的内部深处,有一个函数ReadwithCrypto ORA-12537而失败:网络会话:文件结束错误

堆栈跟踪:

[NetworkException (0x30f9): ORA-12537: Network Session: End of file]
   OracleInternal.Network.ReaderStream.ReadIt(OraBuf OB, Int32 len) +359
   OracleInternal.Network.ReaderStream.ReadwithCrypto(OraBuf OB) +135

[NetworkException (0x80004005): ORA-12570: Network Session: Unexpected packet read error]
   OracleInternal.Network.ReaderStream.ReadwithCrypto(OraBuf OB) +440
   OracleInternal.Network.ReaderStream.Read(OraBuf OB) +124
   OracleInternal.TTC.OraBufReader.GetDataFromNetwork() +378
   OracleInternal.TTC.OraBufReader.Read(Boolean bIgnoreData) +122
   OracleInternal.TTC.MarshallingEngine.UnmarshalUB1(Boolean bIgnoreData) +43
   OracleInternal.TTC.TTCProtocolNegotiation.ReadResponse() +197

[OracleException (0x80004005): ORA-12570: Network Session: Unexpected packet read error]
   OracleInternal.ConnectionPool.PoolManager`3.Get(ConnectionString csWithDiffOrNewPwd, Boolean bGetForApp, String affinityInstanceName, Boolean bForceMatch) +7442
   OracleInternal.ConnectionPool.OraclePoolManager.Get(ConnectionString csWithNewPassword, Boolean bGetForApp, String affinityInstanceName, Boolean bForceMatch) +1163
   OracleInternal.ConnectionPool.OracleConnectionDispenser`3.Get(ConnectionString cs, PM conPM, ConnectionString pmCS, SecureString securedPassword, SecureString securedProxyPassword) +1453
   Oracle.ManagedDataAccess.Client.OracleConnection.Open() +3662
   Contoso.Fabrikam.Database.GetConnection(Boolean useLiveData) in d:\Develop\Contoso\Fabrikam\App_Code\DatabaseConnectivity.cs:76

将服务器配置为可选加密是(可怕的,可怕的)解决方法。