私の知る限り、SSL/TLS 経由の接続は Cloud SQL では常に利用可能です。強制すると必須になります。しかし、私が達成できた保護の最大レベルは、verify-ca
クライアントとサーバーの両方の観点からです。つまり、次のようになります。
- サーバー確認しません(
auth-options
)クライアント証明書の共通名が、接続しようとしているユーザーと一致している(任意の共通名を使用できます) - クライアント確認しないサーバー証明書の共通名が接続先のホスト名と一致している(任意のホスト名を使用できます)
ドキュメントによると私は接続できるですsslmode=verify-full
が、インスタンス名の意味が分からないか、ドキュメントの情報が古くなっています。(1) に接続するにはどうすればよいですかverify-full
?
ドキュメントまたこうも言う。
SSL モードは
verify-full
必須ではありません。CAverify-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の設定例については、ここ。