Oracle JDBC Thin:强制网络加密
Oracle JDBC Thin: enforce network encryption
问题是如何使用 Oracle JDBC 瘦驱动程序并通过在 URL?
中单独指定来强制加密
据了解,我们需要将Oracle Net参数oracle.net.encryption_client
设置为required
。 (参考 link)
供参考:我们目前指定的是TNS格式的OracleJDBCURL,例如:
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 中的默认设置)。出于监管原因,我们需要保证我们获得加密连接。我们需要从客户端强制执行此操作。 (我们需要保护自己免受服务器端潜在的错误配置)
- 'encryption' 是指使用 Oracle 的内置加密方法,称为 Oracle Advanced Security,而不是 TLS。后者当然也是一个选项,但涉及更多(证书马戏团)并且 Oracle Advanced Security 被我们的安全专家认为“足够好”。
- 我们目前在 URL 中使用 TNS 描述符格式。如果另一种格式允许指定上述参数,
encryption_client
,那么可以使用 URL 格式代替.. 只要它允许我们指定相同的格式,例如 ADDRESS_LIST。
- 我们可以替换正在使用的 JDBC 驱动程序,这意味着如果需要,我们可以自由使用最新版本。
我之前在 SO 上看到过这个问题,但没有收到正确的答案。
理想情况下,任何答案都应包含指向 Oracle 文档的指针。
如评论中所述,从 Oracle JDBC 驱动程序的 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)))
据此我们表示必须对连接进行加密,并且必须使用(当前)可用的最强算法对其进行加密。
参见:
问题是如何使用 Oracle JDBC 瘦驱动程序并通过在 URL?
中单独指定来强制加密据了解,我们需要将Oracle Net参数oracle.net.encryption_client
设置为required
。 (参考 link)
供参考:我们目前指定的是TNS格式的OracleJDBCURL,例如:
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 中的默认设置)。出于监管原因,我们需要保证我们获得加密连接。我们需要从客户端强制执行此操作。 (我们需要保护自己免受服务器端潜在的错误配置)
- 'encryption' 是指使用 Oracle 的内置加密方法,称为 Oracle Advanced Security,而不是 TLS。后者当然也是一个选项,但涉及更多(证书马戏团)并且 Oracle Advanced Security 被我们的安全专家认为“足够好”。
- 我们目前在 URL 中使用 TNS 描述符格式。如果另一种格式允许指定上述参数,
encryption_client
,那么可以使用 URL 格式代替.. 只要它允许我们指定相同的格式,例如 ADDRESS_LIST。 - 我们可以替换正在使用的 JDBC 驱动程序,这意味着如果需要,我们可以自由使用最新版本。
我之前在 SO 上看到过这个问题,但没有收到正确的答案。
理想情况下,任何答案都应包含指向 Oracle 文档的指针。
如评论中所述,从 Oracle JDBC 驱动程序的 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)))
据此我们表示必须对连接进行加密,并且必须使用(当前)可用的最强算法对其进行加密。
参见: