Как подключиться к серверу GCP Cloud SQL Postgres с помощью клиентских сертификатов?
Я пытаюсь пройти аутентификацию с помощью экземпляра облачного SQL, используя сертификат клиента:
psql -h "$IP" "sslmode=verify-ca sslkey=certs/tls.key sslcert=certs/tls.crt sslrootcert=certs/ca.crt dbname=postgres"
Password for user root:
Сертификат сервера находится вcerts/ca.crt
; сертификат/ключ клиентаtls.crt
/tls.key
.
Как видите, похоже, это не помогло, иpsql
очевидно, возвращается к паролю. Как я могу отладить эту ситуацию или что-то не так с командой?
Кроме того, когда я генерирую сертификат в GCP, как ни странно, единственное, что требуется, — это имя сертификата; это пользователь ? (Кажется, в конечном итоге этоCN
, что и использует ванильная PG.)
На самом деле следующее взаимодействие еще более причудливо:
Если я не предоставлю сертификат клиента, мне сообщат, что мне нужно это сделать:
# psql -h "$IP" "sslmode=verify-ca sslrootcert=certs/ca.crt dbname=postgres"
psql: error: connection to server at "[…]", port 5432 failed: FATAL: connection requires a valid client certificate
(что интересно, ведь у нас наверняка есть и другие вещи, прекрасно работающие без клиентских сертификатов?)
Если я затем предоставлю сертификат клиента,
# psql -h "$IP" "sslmode=verify-ca sslrootcert=certs/ca.crt sslkey=certs/tls.key sslcert=certs/tls.crt dbname=postgres"
Password for user root:
psql: error: connection to server at "[…]", port 5432 failed: fe_sendauth: no password supplied
Что здесь происходит? Сертификат клиента достаточно действителен, поэтому, очевидно, мы больше не получаем ошибку «для соединения требуется действительный сертификат клиента»… но все же недостаточно действителен для аутентификации? (И мы возвращаемся к паролю, а затем в конечном итоге терпим неудачу?)