Cloud SQL 上的证书验证

Sam*_*tch 5 mysql ssl google-cloud-sql google-cloud-platform

我发现,如果您通过 SSL 连接到 Cloud SQL 实例,服务器证书中提供的 CommonName 会my-project-123456:myinstance导致证书变得不可验证,因为客户端期望 CN 是主机名或 IP。

这个问题的每个解决方案似乎都相当于“只是禁用验证”,这对我来说是不可接受的,因为:

  1. 为什么 GCP 决定正确执行其他所有操作提供 CA 证书和客户端证书),却在身份验证方面失败了?通过禁用验证,您基本上是在说“我同意在某个时候接受 MITMed”。

  2. 由于 PIPA/HIPAA 的原因,我们无法快速、宽松地进行验证的项目怎么办?

  3. 不支持关闭验证的 mySQL 客户端怎么办?例如:在即将发布的 5.6.16 版本之前,所有使用 mysqlnd 的 PHP 5.6 mysql 库。

有没有办法让 SSL 在 Cloud SQL 上正常工作?

小智 1

服务器证书的通用名称中没有实例的 IP 地址的原因之一是因为这些 IP 可能会更改。今天实例 A 的 IP 地址可能是明天实例 B 的 IP 地址,因为 A 已被删除,或者 A 决定不再需要该 IP 地址。因此,实例名称被确定为实例的更唯一标识。

另外,mysql 客户端库默认禁用主机名验证。http://dev.mysql.com/doc/refman/5.7/en/ssl-options.html

关于 MITM 攻击,MITM 攻击 Cloud SQL 实例是不可能的,因为服务器证书和每个客户端证书都是由唯一的自签名 CA 签名的,而这些 CA 绝不会用于签署多个证书。服务器仅信任由这些 CA 之一签名的证书。每个客户端证书使用唯一的 CA 的原因是因为 MySQL 5.5 不支持证书吊销列表,而且我们也不想处理 CRL,但希望支持删除客户端证书。

我们将研究为无法关闭主机名验证的客户端支持 SSL 的方法。但我不能就此承诺预计到达时间。

云 SQL 团队。

  • 1. 这不是实例名称,而是用冒号连接的项目和实例名称。如果它“仅”是实例名称,或者连接符是主机名允许的字符,我可以在 DNS 或主机文件中解决此问题。2. 由于#1,每个人*必须禁用证书验证*,因此如果有人中间人攻击连接并弄乱了证书,那么任何人都不会收到通知。3. mySQL 官方库默认情况下可能关闭验证,但这既不正确也不建议这样运行,并且第 3 方客户端库 [例如:PHP 的 mysqlnd] 可能会选择 *secure* 默认值 (2认同)