是否可以使用php在没有证书或密钥的情况下通过ssl连接到远程mysql数据库?

时间:2018-08-03 18:13:47

标签: php mysql database ssl pdo

让我们说我有一个为我提供数据库凭据的客户端,他们想使用安全/加密的方式连接到数据库。他们还在自己的mysql设置中启用了ssl。当他们给我他们的数据库信用时,我不想问他们密钥和证书。那么在不包含这些项目的情况下连接到客户端数据库时,是否可以通过ssl建立加密的安全连接?

更新: 所以在进一步修改之后

$db->ssl_set(NULL, NULL,'/path_to_self_signed_cert/ca.pem',NULL,'');
$db->real_connect('hostname','username','password','dbname', 
'port'socket', MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT);`

执行此操作后,我得到了想要的结果

$db->query("SHOW STATUS LIKE 'Ssl_cipher';");

显示密码算法,而不是空白

  (
   [0] => Ssl_cipher
   [Variable_name] => Ssl_cipher
   [1] => DHE-RSA-AES128-SHA
   [Value] => DHE-RSA-AES128-SHA
  )

但是真的不知道为什么会这样,自签名证书是这样做的正确方法吗?

2 个答案:

答案 0 :(得分:1)

@rickjerrity我通过命令行连接到远程数据库,并通过运行\s并说SSL: Cipher in use is DHE-RSA-AES256-SHA来检查状态。但是,当我使用php并使用相同的凭据连接到相同的数据库时,它说密码为空。这是我用来连接到远程数据库的代码

$db = mysqli_init();
    $db->real_connect('hostname','username','password','dbname');
    $res = $db->query("SHOW STATUS LIKE 'Ssl_cipher';");
    while ( $row = $res->fetch_array() ) {
        print_r($row);
    }
    $db->close();

,响应为

[0] => Ssl_cipher
[Variable_name] => Ssl_cipher
[1] => 
[Value] =>

答案 1 :(得分:0)

除了数据库凭证之外,对于安全的数据库连接,不需要客户端证书或密钥。 PHP在连接时应验证SSL证书的完整性。就像您提到的那样,任何其他能够验证连接的加密状态的PHP方法都是出于理智。如果您显示一些特定的代码示例,我们也许可以提供进一步的帮助。