我最近读到Oracle支持Oracle客户端和服务器之间的网络加密。我假设如果服务器支持这一点,客户端可以在各种Oracle数据访问提供程序库中使用的完整Oracle客户端驱动程序中完成连接。
但是,我的应用程序使用的是Oracle中更独立的Managed ODP.NET驱动程序,它不需要完整的Oracle客户端安装。有谁知道这个驱动程序是否支持网络加密?
This page似乎提供了建议,但没有特别提出托管ODP.NET驱动程序。
并且this unanswered thread似乎表明它不受支持。如果是这样的话,连接会完全失败吗?在我通过这个问题进行试验和错误之前,我希望找到一些明确的文档。
答案 0 :(得分:3)
Oracle刚刚(2015年10月)发布了 ODAC 12c Release 4 。
这包括最新的 Oracle托管数据访问提供程序,它现在支持网络数据加密(NDE)。
(自2015年10月14日起,Odp.Net Managed lib尚未推送至NuGet软件包存储库)。
自2015年10月15日起,NupetNet托管服务提供商第4版软件包现已在NuGet软件包存储库中提供。
请注意,由于此NDE功能是 ASO 的一部分,因此您需要拥有Oracle Enterprise License才能在生产中使用它。
答案 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纯托管驱动程序的.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
将服务器配置为可选加密是(可怕的,可怕的)解决方法。