Как создать зашифрованное соединение с SQL Server из Ubuntu с помощью PHP / PDO

7

Я пытаюсь подключиться к SQL Server из приложения PHP/Zend Framework, работающего на Ubuntu и в удаленном месте.

Я пытаюсь заставить подключающееся приложение запрашивать шифрование с SQL Server (так как соединение по умолчанию на 1433 находится в явном виде, и я не хочу, чтобы мои учетные данные были обнюханы).

Я настроил SSL-сертификат подстановки на SQL Server, и я создаю соединение PDO со следующим DSN:

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

Так как имя хоста не соответствует установленному сертификату, я ожидаю, что соединение завершится неудачно - но это не сработает.

  • 0
    Когда вы говорите, что у вас есть SSL-сертификат с символом подстановки, с какими CN совпадает этот сертификат? Я подозреваю, что драйвер может никогда не выполнить реальный CN для проверки имени хоста; TrustServerCertificate = false только предотвращает самозаверяющие сертификаты.
  • 0
    Дело в том, что имя хоста абсолютно не совпадает с подстановочным доменом, поэтому я ожидаю ошибки. Если я не получу ошибку сертификата в этом сценарии, я не могу доверять соединению, когда имя хоста действительно совпадает.
Показать ещё 5 комментариев
Теги:
sql-server
pdo

3 ответа

1

Может ли быть, что Encrypt=true;TrustServerCertificate вообще не рассматриваются? Не являясь экспертом по этому вопросу, ознакомьтесь с документацией в PHP в отношении PDO_DBLIB DSN. Как записано, в DSN есть специальный параметр, который называется secure и в настоящее время не используется. Я не уверен, что это должен быть правильный способ объявить, что вы хотите иметь безопасное соединение в этом DSN, и это также не совсем полезно, поскольку он помечен как unused.

Кроме того, сделайте следующее

В php.ini убедитесь, что установлено следующее: mssql.secure_connection = On

Посмотрите, лучше ли подключение через PDO_ODBC к тому, чего вы хотите достичь. Для подключения через PDO_ODBC проверьте этот пример

  • 0
    Спасибо, что заставили меня перечитать руководство еще раз
  • 0
    @HorusKol нет необходимости, приятель, я всегда проверяю это на случай, если что-то изменилось или я что-то забыл. В конце концов, мы в этой игре, потому что в основном мы читатели ... нам нравится читать и решать. :) ура
0

попробуйте установить AES ENCRYPTION CERTIFICATE, это лучшее, что я использовал для защиты учетных данных от обнюхивания

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

сделать значение по умолчанию true для ssl crtificate в файле php.ini а затем обработать с помощью AES

-1

Это сложнее, чем просто установить флаг.

Отправить этот блог: http://www.madirish.net/214

  • Вам нужно будет создать или установить сертификат ssl на сервере mysql.
  • в my.cnf выполните следующие настройки:

    SSL-са =/и т.д. /SSL/MySQL/server.csr
    SSL-сертификат =/и т.д. /SSL/MySQL/server.cert
    ssl-key =/etc/ssl/mysql/server.key

  • перезапустить mysql: mysqld restart

  • Создание клиентских ключей

  • Отправьте эти ключи вместе с именем пользователя и паролем.

После ответов в stackoverflow подробно объясните:

Подключение к удаленному серверу MySQL с помощью SSL с PHP

Подключения SSL к MySQL

Надеюсь, что это поможет.

  • 1
    Можете ли вы процитировать соответствующие части статьи? Я мог бы принять ответ, если бы это было больше, чем просто ссылка, которая может гнить
  • 2
    Этот вопрос помечен как sql-server , обозначающий Microsoft SQL Server. Ваш ответ для MySQL, который является другим продуктом СУБД.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню