当我试图连接到gcloud postgres db时,我遇到了一个问题,它允许我的laravel应用程序在cloud run中运行ssl。我从gcloud下载了所有三个cert文件,并在config/database.php中设置了路径。
'pgsql' => [
'driver' => 'pgsql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '5432'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8',
'prefix' => '',
'schema' => 'public',
'sslmode' => 'require',
'options' => [
'sslcert' => storage_path(path: 'client-cert.pem'),
'sslkey' => storage_path(path: 'client-key.pem'),
'sslrootcert' => storage_path(path: 'server-ca.pem'),
],
],
在启用“仅允许SSL连接”后,我收到此错误:'SQLSTATE[08006] [7] FATAL: connection requires a valid client certificate (SQL: select * from "sessions" where "id" = wDJOd7Ssm6ggLngYQPprlIP0FNrtMxGTtCW4lELX limit 1)'
我可以通过pgadmin和psql控制台从我的本地机器(windows)使用SSL证书成功连接到同一个数据库。但我需要通过我的申请。请帮助我克服这一点,因为它显示为GCP安全指挥中心的高安全风险因素。谢谢.
2条答案
按热度按时间weylhg0b1#
至少有两个可能的问题:
第1项:
您有 'sslmode' => 'require'。这意味着服务器证书是针对CA进行验证的。对于Google Cloud SQL,服务器的证书包含与主机名不匹配的Cloud SQL示例的名称。
将值更改为allow*。Google Cloud SQL将强制执行客户端证书。PostgresQL客户端不会验证服务器的证书,如果验证失败。
第二项:
证书无效。在文本编辑器中打开每个文件,并验证它们是否是具有正确标题的文本文件:
client_cert.pem:-开始CERTIFICATE-client_key.pem:-开始RSA PRIVATE KEY-server-ca.pem:-开始证书-
您也可以使用openssl**来验证文件。
6jygbczu2#
在Google Cloud SQL上访问启用SSL的Postgres示例的方法略有不同(使用DBeaver),我遇到了类似的问题,这是我所做的。