Oracle JDBC Thin:强制网络加密



问题是如何使用Oracle JDBC Thin驱动程序并在URL中单独指定加密?

可以理解我们需要将Oracle Net参数oracle.net.encryption_client设置为required。(参考链接)

作为参考:我们目前使用TNS格式指定Oracle JDBC URL,例如:

DESCRIPTION = 
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = tcp)(HOST = myora1.corp.net)(PORT = 1521))
(ADDRESS = (PROTOCOL = tcp)(HOST = myora2.corp.net)(PORT = 1521)))
(FAILOVER=ON)
(CONNECT_DATA = (SERVER = dedicated)(SERVICE_NAME = foobar))

转换为以下JDBC URL字符串:

jdbc:oracle:thin:@(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = tcp)(HOST = myora1.corp.net)(PORT = 1521))(ADDRESS = (PROTOCOL = tcp)(HOST = myora2.corp.net)(PORT = 1521)))(FAILOVER=ON)(CONNECT_DATA = (SERVER = dedicated)(SERVICE_NAME = foobar)))

在你回答之前,你应该知道以下内容:

  1. 我们不能使用属性,因为这是一个第三方应用程序。我们所能设置的就是URL字符串。
  2. 我们不能使用乐观加密(Oracle默认)。出于监管原因,我们需要保证获得加密连接。我们需要从客户端执行这一点。(我们需要保护自己免受服务器端潜在的错误配置)
  3. 通过"加密",我们指的是使用Oracle的内置加密方法,称为Oracle高级安全,而不是TLS。后者当然也是一种选择,但涉及更多(证书马戏团),Oracle高级安全被认为"足够好";
  4. 我们目前在URL中使用TNS描述符格式。如果另一种格式允许指定上述参数encryption_client,那么可以使用该URL格式。只要它允许我们指定相同的,例如ADDRESS_LIST。
  5. 我们可以替换正在使用的JDBC驱动程序,这意味着如果需要的话,我们可以自由地使用最新版本。

我看到这个问题在SO之前被问过,但是从来没有收到一个合适的答案。

任何答案都应该包含指向Oracle文档的指针。

如评论中所述,从Oracle JDBC Driver的v21开始,您可以为thin方法使用Security选项,如下所示:

jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=host)(PORT=1521))(CONNECT_DATA= (SERVICE_NAME=servicename))(Security=(ENCRYPTION_LEVEL=REQUIRED)))

因此,您不需要属性,您可以在连接字符串中嵌入所需的加密级别。

您可以进一步限制加密算法以增加安全性,例如:

jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=host)(PORT=1521))(CONNECT_DATA= (SERVICE_NAME=servicename))(Security=(ENCRYPTION_CLIENT=REQUIRED)(ENCRYPTION_TYPES_CLIENT=AES256)))

在这里,我们说连接必须加密,并且必须使用(当前)最强的算法加密。

:

加密级别JDBC字符串

加密类型JDBC字符串

最新更新