据我所知,Cloud SQL 始终可以通过 SSL/TLS 连接。如果我强制执行它,它就成为必需的。但我能够达到的最大保护级别是verify-ca
从客户端和服务器的角度来看的。那是:
- 服务器不会确保 (
auth-options
)客户端证书中的通用名称与我尝试连接的用户匹配(可以使用任何通用名称) - 客户端不会确保服务器证书中的公用名称与我要连接的主机名匹配(可以使用任何主机名)
根据我可以连接的文档sslmode=verify-full
,但要么我不知道它们的实例名称是什么意思,要么文档中的信息已过时。(1) 如何连接verify-full
?
文档还说:
verify-full
不需要SSL 模式;verify-ca
就足够了,因为 CA 是特定于实例的。
在文档pg
中我可以看到:
verify-ca
和之间的差异verify-full
取决于根 CA 的策略。如果使用公共 CA,verify-ca
则允许连接到其他人可能已向该 CA 注册的服务器。在这种情况下,verify-full
应始终使用。如果使用本地 CA,甚至是自签名证书,verify-ca
通常可以提供足够的保护。
(2)这是什么意思?如果CA是本地的,那么只有授权的人才能创建证书和私钥,并用CA的根证书签署证书?虽然人们可能可以获得服务器的证书(如果服务器是公共的),但是却无法获得私钥?那么,未经授权的人就不能拥有有效的证书吗?因此,如果证书有效,则它是由授权人员创建的,CN 是什么并不重要?为什么?看起来我已经很接近了,但仍然缺少一些东西。
(3) 如果CA是本地的,verify-ca
== verify-full
(无窃听,无MITM)?
首先需要弄清楚服务器证书的CN:
然后就可以连接了:
除了使用这个技巧之外,我不知道还有其他方法可以解决这个问题(CN)。因此,您似乎不应该使用它
verify-full
,或者它没有任何意义。文档表明verify-full
至少没有明显优于verify-ca
.对于本地 CA,只有经过授权的人才能获得证书,因此没有人可以冒充服务器。
verify-ca != verify-full
,但据说在安全性方面没有太大区别。特别是不应出现中间人攻击 (MITM)。配置 SSL/TLS 的示例可以在此处找到。