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