3

Google Cloud SQL (MySQL) 支持SSL 客户端证书以保护连接。我已经让这些与mysql CLI 客户端和 MySQL-python 一起工作,没有任何戏剧性,但 Java 的 JDBC 驱动程序模型似乎不太灵活。通过将必要的密钥和证书导入到我的密钥库中,我能够使其工作,但似乎我无法轻松地提供特定证书以在运行时用于特定连接。

对于我来说,将所有证书存储在每个 JVM 的单个密钥库中是行不通的,我们有一个包含数十个独立客户端证书的多租户环境。PostgreSQL JDBC 文档随便提到它应该可以通过实现你自己的 SSLSocketFactory ( source ):

有关如何实际实现此类的信息超出了本文档的范围。寻求帮助的地方是JSSE 参考指南和JDBC 驱动程序提供的NonValidatingFactory的源代码。

Java SSL API 对 JDBC 驱动程序开发人员来说并不是很熟悉,我们会对您使用此机制实现的任何有趣且通常有用的扩展感兴趣。具体来说,能够提供由服务器验证的客户端证书会很好。

我见过的唯一实现是GoogleCloudPlatform/cloud-sql-mysql-socket-factory即时查询 Google Cloud API 以检索临时 ssl 客户端证书。这就是我要开始的内容,但我对一些基本的套接字属性(特别是connectTimeout 和 socketTimeout)当前没有实现感到沮丧。

还有其他我应该注意的 SSLSocketFactory 实现吗?似乎通用实现对多个 JDBC 驱动程序很有用(MySQL 连接器/JPostgreSQL pgJDBC和 Oracle 提供了一些客户端证书支持)。这样,JDBC 连接字符串可以支持客户端证书作为标准化参数(base64 编码?),就像当前包含用户名和密码一样。

4

0 回答 0