Mysql

如果 mysql 伺服器不驗證客戶端,那麼使用客戶端證書有什麼意義?

  • August 7, 2022

預設情況下,mysql 伺服器在以下位置創建這 6 個證書/var/mysql/lib

-rw------- 1 mysql mysql 1676 Aug  3 00:16 ca-key.pem
-rw-r--r-- 1 mysql mysql 1112 Aug  3 00:16 ca.pem
-rw-r--r-- 1 mysql mysql 1112 Aug  3 00:16 client-cert.pem
-rw------- 1 mysql mysql 1676 Aug  3 00:16 client-key.pem
-rw------- 1 mysql mysql 1680 Aug  3 00:16 private_key.pem
-rw-r--r-- 1 mysql mysql  452 Aug  3 00:16 public_key.pem
-rw-r--r-- 1 root  root  1172 Aug  6 12:20 server-cert.pem
-rw------- 1 mysql mysql 1676 Aug  3 00:16 server-key.pem

https://dev.mysql.com/doc/mysql-security-excerpt/5.7/en/creating-ssl-rsa-files-using-mysql.html中所述,public_key.pemprivate_key.pem用於:

這些密鑰對文件支持使用 RSA 在未加密連接上為sha256_password外掛驗證的帳戶進行安全密碼交換;

如果我理解正確,其他 6 個證書用於相互 tls 驗證。

我用 DataGrip 對其進行了測試,有 3 個選項RequireVerifa CAFull Verification. (命令行界面例如mysqlsh有相應的選項)

  • Require與證書無關,它像普通的 https 一樣使用伺服器啟動 tls 加密。
  • Verify CA驗證ca.pem您從伺服器獲得的/var/lib/ca.pem.
  • Full Verification是客戶端不僅驗證ca.pem,而且驗證server-cert.pemserver-key.pem

(您需要為這項工作重新生成一個server-cert.pem。因為自動生成server-cert.pemSubject:欄位與伺服器 ip/domain 不匹配)

在此處輸入圖像描述

沒有一個選項需要指定客戶端證書和密鑰。那麼provingclient-key.pemclient-cert.pem在客戶端有什麼用呢?我在 mysql 伺服器中找不到像“驗證客戶端”這樣的選項。所以這只是驗證和客戶端證書完全沒用的一種方式?我不明白。

您一定在文件中錯過了這一點:創建使用者時,您可以指定各種TLS 身份驗證選項。例如,

CREATE USER 'rick'@'%' REQUIRE SUBJECT 'CN=Rick' AND ISSUER '...'

引用自:https://dba.stackexchange.com/questions/315324