当我试图连接到gcloud postgres数据库时,我正面临着一个问题,该数据库在云端运行的laravel应用程序允许使用ssl。我从gcloud下载了所有三个证书文件,并在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安全指挥中心显示为一个高安全风险因素。
至少有两个可能的问题。
你有 'sslmode' => 'require' 。这意味着服务器的证书是根据CA验证的。对于谷歌云SQL,服务器的证书包含云SQL实例的名称,与主机名不匹配。
将该值改为 允许 。Google Cloud SQL将强制执行客户端证书。PostgresQL客户端不会验证服务器的证书,如果验证了,就会失败。