Cloud SQL インスタンスに接続するために SSL/TLS を構成するにはどうすればよいですか?

Cloud SQL インスタンスに接続するために SSL/TLS を構成するにはどうすればよいですか?

私の知る限り、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の設定例については、ここ

関連情報