Mysql
如果 mysql 伺服器不驗證客戶端,那麼使用客戶端證書有什麼意義?
預設情況下,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.pem
並private_key.pem
用於:這些密鑰對文件支持使用 RSA 在未加密連接上為
sha256_password
外掛驗證的帳戶進行安全密碼交換;如果我理解正確,其他 6 個證書用於相互 tls 驗證。
我用 DataGrip 對其進行了測試,有 3 個選項
Require
:Verifa CA
和Full Verification
. (命令行界面例如mysqlsh
有相應的選項)
Require
與證書無關,它像普通的 https 一樣使用伺服器啟動 tls 加密。Verify CA
驗證ca.pem
您從伺服器獲得的/var/lib/ca.pem
.Full Verification
是客戶端不僅驗證ca.pem
,而且驗證server-cert.pem
和server-key.pem
。(您需要為這項工作重新生成一個
server-cert.pem
。因為自動生成server-cert.pem
的Subject:
欄位與伺服器 ip/domain 不匹配)沒有一個選項需要指定客戶端證書和密鑰。那麼proving
client-key.pem
和client-cert.pem
在客戶端有什麼用呢?我在 mysql 伺服器中找不到像“驗證客戶端”這樣的選項。所以這只是驗證和客戶端證書完全沒用的一種方式?我不明白。
您一定在文件中錯過了這一點:創建使用者時,您可以指定各種TLS 身份驗證選項。例如,
CREATE USER 'rick'@'%' REQUIRE SUBJECT 'CN=Rick' AND ISSUER '...'