據我所知,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)?
有關我到底做了什麼的更多詳細資訊可以找到這裡。
答案1
我如何連接
verify-full
?
首先需要弄清楚伺服器憑證的CN:
$ psql -h xx.yyy.xx.yyy -U postgres sslmode=verify-full
psql: error: connection to server at "xx.yyy.xx.yyy", port 5432 failed: server certificate for "31-0628fb91-0e3b-4c89-adca-ad557023a699.europe-central2.sql.goog" (and 1 other name) does not match host name "xx.yyy.xx.yyy"
然後就可以連接了:
$ psql -U postgres 'sslmode=verify-full hostaddr=xx.yyy.xx.yyy host=xx-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.europe-central2.sql.goog'
Password for user postgres:
psql (15.4, server 11.19)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.
postgres=>
除了使用這個技巧之外,我不知道還有其他方法可以解決這個問題(CN)。因此,您似乎不應該使用它,verify-full
或者它沒有任何意義。文件表明verify-full
至少沒有明顯優於verify-ca
.
這是什麼意思?
對於本地 CA,只有經過授權的人才能獲得證書,因此未經授權的人無法偽造目標伺服器。
如果 CA 是本地的
verify-ca == verify-full
(沒有竊聽,沒有 MITM)?
verify-ca != verify-full
,但據說在安全性方面沒有太大區別。特別是不應出現中間人攻擊 (MITM)。
設定 SSL/TLS 的範例可以找到這裡。