我有一个 MySQL 服务器。从技术上讲,它是与 MySQL 兼容的 Amazon Aurora,我可以从多个客户端连接到它,然后执行:
SELECT *
FROM performance_schema.session_status
WHERE VARIABLE_NAME IN ('Ssl_version','Ssl_cipher');
每次我收到以下回复:
VARIABLE_NAME,VARIABLE_VALUE
'Ssl_cipher','ECDHE-ECDSA-AES128-GCM-SHA256'
'Ssl_version','TLSv1.2'
所以连接是加密的,但我不清楚如何加密。例如,在 MySQL Workbench 中,我已在连接属性中将“使用 SSL”设置为“要求”,但我没有提供以下任何内容:
如果我将“使用 SSL”设置为“需要并验证 CA”或“需要并验证身份”,则连接会失败,表面上是因为我没有提供上述 SSL 文件。如果没有在连接字符串中指定任何证书,我也可以从不同的客户端主机(Web 服务器、Lambda 函数、MySQL CLI 等)建立加密连接,但我不清楚这些连接是如何加密的,因为有连接字符串中未指定证书。我对在生产中运行某些东西感到不舒服,这似乎是偶然的,并且希望有人可以帮助巩固我对所观察到的内容的理解。
TLS 不需要发送客户端证书和密钥。
如果使用
REQUIRE X509, ISSUER or SUBJECT
定义用户,则仅需要客户端证书和相应密钥。
如果您不提供 CA,服务器证书将根据系统 CA 进行检查,如果您有自签名证书,验证将失败。
如果需要使用受信任的安全连接,只有两种验证方式:要么服务器证书由受信任的机构签名,要么客户端知道并检查证书的指纹。据我所知,后一种仅在 MariaDB 中受支持。