【问题标题】:PHP connect to MS SQL with SSLPHP 使用 SSL 连接到 MS SQL
【发布时间】:2016-04-24 21:03:14
【问题描述】:

我的意思很简单。我想通过安全连接从 PHP 脚本连接到外部 MS SQL 数据库。然而,这被证明是有问题的,到目前为止,我花了三个小时研究,不知所措。

客户端的平台是Ubuntu,这意味着我不能使用SQLSRV。 安全连接已经过不同客户端的测试,并且工作正常。 我目前正在使用 PDO 和 DBlib 连接到数据库,也可以正常工作。

我找不到任何强制安全连接的方法。我尝试了多个其他驱动程序,但无济于事。

我有什么选择?

编辑:我留下了以下 FreeTDS 日志...

config.c:543:   Got a match.
config.c:565:   host = 'XXXXXXXXXX'
config.c:595:   Found host entry XXXXXXXXXX.
config.c:599:   IP addr is XXXXXXXXXX.
config.c:565:   port = '1433'
config.c:565:   encryption = 'require'
config.c:565:   check certificate hostname = 'no'
config.c:629:   UNRECOGNIZED option 'check certificate hostname' ... ignoring.
config.c:565:   ca file = 'XXXXXXXXXX.pem'
config.c:629:   UNRECOGNIZED option 'ca file' ... ignoring.

【问题讨论】:

  • 你收到了什么错误?
  • 无,我已经查询服务器检查连接是否被加密,它不是。我现在会喜欢一些错误。

标签: php sql ubuntu ssl


【解决方案1】:

如果你想使用 PDO,你可以设置 PDO ODBC。您需要设置配置文件/etc/odbc.ini/etc/odbcinst.ini/etc/freetds/freetds.conf

您还必须安装 unixodbc 和 freetds:apt-get install unixodbc tdsodbc

您可以在此处查看更多信息:Connect PHP to MSSQL via PDO ODBC

编辑:要在 ODBC 中强制执行 SSL,请添加 Encrypt 关键字并将其设置为连接字符串中的 true。并设置您的 SQL Server 以使用 SSL:https://support.microsoft.com/en-us/kb/316898

编辑 2:根据 OP,按照以下规范将 encryption=requirecheck certificate hostname 添加到 freetds.config:http://www.freetds.org/userguide/freetdsconf.htm 以及上述步骤将解决问题

【讨论】:

  • 我会考虑这个,虽然我找不到任何特定的方法来强制 ODBC 建立 SSL 连接。
  • 使用 dblib 时 Encrypt 关键字不可用吗?
  • 我已经配置了ODBC,它可以正常工作。我已将Encrypt 关键字添加到odbc.ini,但它仍然没有加密连接。它仍然没有抛出任何错误。服务器配置为接受加密连接和普通连接。我用来检查连接的查询是SELECT encrypt_option FROM sys.dm_exec_connections WHERE session_id = @@SPID。我很确定 Encrypt 在 ODBC DSN 中不可用,但我知道它用于 PDO_SQLSRV
  • 要强制建立安全连接,可以按照以下规范将encryption=require 附加到freetds.confighttp://www.freetds.org/userguide/freetdsconf.htm 另一个有用的属性是check certificate hostname。请更新您的答案以包含所有相关信息。
  • @SamuelWillems 它与encryption=requirecheck certificate hostname 一起使用了吗?
【解决方案2】:

您是否已将mssql_connect 配置为使用安全连接?查看您的 php.ini 并验证 mssql.secure_connection 参数是否设置为 on

[MSSQL]
mssql.secure_connection = On

【讨论】:

  • 您好,谢谢您的回复。我不想使用mssql_connect,因为它已被弃用。但是,我确实尝试更改此设置并使用mssql_connect。我也在/etc/ssl/certs 中安装了证书。我想知道如何调试它,我目前不知道出了什么问题。它甚至没有尝试通过 SSL 连接,还是遇到问题并默认为普通模式?
猜你喜欢
  • 2014-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-09
  • 1970-01-01
  • 1970-01-01
  • 2016-11-18
  • 2013-05-27
相关资源
最近更新 更多