【问题标题】:How to create an encrypted connection to SQL Server from Ubuntu using PHP/PDO如何使用 PHP/PDO 从 Ubuntu 创建到 SQL Server 的加密连接
【发布时间】:2015-05-04 07:03:39
【问题描述】:

我正在尝试从运行在 Ubuntu 和远程位置的 PHP/Zend 框架应用程序连接到 SQL Server。

我正在尝试让连接应用程序从 SQL Server 请求加密(因为 1433 上的默认连接是明确的,我不希望我的凭据被嗅探)。

我已在 SQL Server 上配置通配符 SSL 证书,并正在使用以下 DSN 创建 PDO 连接:

dblib:host=server-not-matching-domain.com:1433;dbname=MyDB;Encrypt=true;TrustServerCertificate=false;charset=

取自http://blogs.msdn.com/b/brian_swan/archive/2011/03/08/sql-server-driver-for-php-connection-options-encrypt.aspx

由于主机名与安装的证书不匹配,我预计连接会失败 - 但它不会失败。

【问题讨论】:

  • 当您说您拥有通配符 SSL 证书时,该证书与哪些 CN 匹配?我怀疑驱动程序可能永远不会对主机名进行实际的 CN 检查; TrustServerCertificate=false 仅阻止自签名证书。
  • 关键是主机名绝对不匹配通配符域,所以我预计会出错。如果在这种情况下我没有收到证书错误,那么当主机名匹配时我就无法信任连接。
  • 有趣 - 我的问题似乎被重复了:stackoverflow.com/questions/34875958/… - 这里和那里都有很好的答案......协议是什么?
  • 您能否准确验证您使用的是什么驱动程序以及客户端是 Ubuntu? sqlncli-11.0.1790.0 ?
  • 我问是因为上次我尝试这个freetds 是在混合。 PDO_SQLSRV 仅适用于 Windows。也许您应该添加到 freetds.conf / odbc.ini...encryption=requirecheck certificate hostname

标签: php sql-server ubuntu pdo


【解决方案1】:

可能是Encrypt=true;TrustServerCertificate 根本没有考虑到? 如果不是这方面的专家,请查看PHP 中有关PDO_DBLIB DSN 的文档。如前所述,DSN 中有一个特殊参数,称为secure,目前未使用。 我不确定这是否应该是声明您希望在此 DSN 中建立安全连接的正确方式,而且它被标记为 unused 也完全没有帮助。

除此之外还要做以下事情

php.ini 中确保设置了以下内容:mssql.secure_connection = On

看看通过PDO_ODBC 连接是否更适合您想要实现的目标。要通过PDO_ODBC 进行连接,请查看此example

【讨论】:

  • @HorusKol 不需要,我总是会检查它以防万一发生变化或我忘记了什么。毕竟我们在这个游戏中,因为底线我们主要是读者……我们喜欢阅读和解决。 :) 干杯
【解决方案2】:

尝试安装 AES ENCRYPTION CERTIFICATE,这是我用来保护凭据不被嗅探的最好方法

dblib:host=server-not-matching-domain.com:1433;dbname=MyDB;Encrypt=true;TrustServerCertificate=true;charset=utf8

在 php.ini 文件中设置 ssl crtificate 的默认值为 true 然后继续使用 AES

【讨论】:

    【解决方案3】:

    这比仅仅设置一个标志更复杂。

    参考此博客:http://www.madirish.net/214

    1. 您必须在 mysql 服务器上创建或安装 ssl 证书。
    2. 在 my.cnf 中进行以下设置:

      ssl-ca=/etc/ssl/mysql/server.csr
      ssl-cert=/etc/ssl/mysql/server.cert
      ssl-key=/etc/ssl/mysql/server.key

    3. 重启mysql:mysqld restart

    4. 创建客户端密钥

    5. 将这些密钥连同用户名和密码一起发送。

    以下stackoverflow答案详细解释:

    Connect to remote MySQL server with SSL from PHP

    PHP to MySQL SSL Connections

    希望对你有帮助。

    【讨论】:

    • 能否引用文章的相关部分?如果它不仅仅是一个可能会腐烂的链接,我可能会接受答案
    • 此问题标记为sql-server,表示Microsoft SQL Server。您的答案是 MySQL,它是一个不同的 DBMS 产品。
    猜你喜欢
    • 2012-11-02
    • 1970-01-01
    • 2017-06-17
    • 1970-01-01
    • 2010-10-22
    • 2015-07-21
    • 2017-08-09
    • 1970-01-01
    • 2016-09-07
    相关资源
    最近更新 更多