【问题标题】:Is it possible to connect via ssl to a remote mysql db using php without certificates or keys?是否可以在没有证书或密钥的情况下使用 php 通过 ssl 连接到远程 mysql 数据库?
【发布时间】:2018-08-03 18:13:47
【问题描述】:

假设我有一个客户端,它为我提供数据库凭据,并且他们希望使用安全/加密的方式连接到数据库。他们还在他们的 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
  )

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

【问题讨论】:

  • 你能澄清一下吗?如果已正确设置数据库,则 SSL 证书应该是有效的,并且建立安全连接应该像使用他们提供给您的数据库凭据一样简单。他们不应该给你任何额外的密钥或证书。
  • @rickjerrity 我在想你需要一些证书或密钥来在客户端和服务器之间建立安全的加密连接。是否有 php 代码来验证连接是否已加密?
  • 我已经发布了您的问题的答案。如果您需要进一步澄清,请随时在此处编辑您的原始问题或评论/答案。
  • 您不需要密钥,但您需要使用 OpenSSL 编译 php,以便 php 进行握手。
  • @rickjerrity 我在下面回复了您的回答

标签: php mysql database ssl pdo


【解决方案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] =>

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 正如 Anthony 在上面的评论中提到的,这可能是 PHP 配置问题。根据 Anthony 的说法,PHP 必须使用 OpenSSL 编译才能真正建立 TLS 连接。仔细检查您是否能够使用 PHP 与任何有效网站建立任何 TLS 连接。
    猜你喜欢
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    • 2012-07-11
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    相关资源
    最近更新 更多