连接需要一个有效的客户端证书在laravel谷歌云postgres与ssl模式

2ledvvac  于 2023-10-19  发布在  其他
关注(0)|答案(2)|浏览(118)

当我试图连接到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安全指挥中心的高安全风险因素。谢谢.

weylhg0b

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**来验证文件。

6jygbczu

6jygbczu2#

在Google Cloud SQL上访问启用SSL的Postgres示例的方法略有不同(使用DBeaver),我遇到了类似的问题,这是我所做的。

  1. ssl -> true
  2. sslkey ->提供客户端密钥文件。
  3. sslcert ->提供客户端证书。
  4. sslfactory -> org.postgresql.ssl.jdbc4.LibPQFactory。
  5. sslmode -> verifiy-ca

相关问题