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필요하지 않습니다. verify-caCA는 인스턴스별로 다르므로 충분합니다.

~ 안에문서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 구성 예를 찾을 수 있습니다.여기.

관련 정보