PHP & amp; PostgreSQL — значение sslmode & quot; требовать & quot; неверно, если поддержка SSL не скомпилирована

Я пытаюсь подключиться к Heroku Postgres, которые поддерживают только SSL-соединения. SSL-соединение прекрасно работает с другими инструментами (Postico) и средами программирования (Node.js), но при подключении из PHP я всегда получаю эту ошибку:
sslmode value "require" invalid when SSL support is not compiled

Моя локальная среда — OS X, и все пакеты устанавливаются вместе с homebrew и имеют поддержку SSL. Также pgsql имеет поддержку SSL на основе вывода phpinfo ():
SSL support => enabled

Libpq и Postgres скомпилированы с поддержкой SSL:
-lpgcommon -lpgport -lssl -lcrypto -lz -lreadline -lm

Версия PHP: 7.2.5 (также пробовал ветки 5.6, 7.1)
Локальная версия Postgres и libpq: 10.3

Перепробовал каждое решение, которое я мог, но не могу заставить это соединение работать. Поддержка Postgres скомпилирована из коробки для PHP 7.2.5 при установке через homebrew. Больше нет отдельного пакета php-pgsql / php-pdo-pgsql.

3

Решение

Сообщение об ошибке ясно, это происходит из этого кода в PostgreSQL libpq:

#ifndef USE_SSL
switch (conn->sslmode[0])
{
case 'a':           /* "allow" */
case 'p':           /* "prefer" */

/*
* warn user that an SSL connection will never be negotiated
* since SSL was not compiled in?
*/
break;

case 'r':           /* "require" */
case 'v':           /* "verify-ca" or "verify-full" */
conn->status = CONNECTION_BAD;
printfPQExpBuffer(&conn->errorMessage,
libpq_gettext("sslmode value \"%s\" invalid when SSL support is not compiled in\n"),
conn->sslmode);
return false;
}
#endif

Этот код компилируется только когда PostgreSQL был не сконфигурировано --with-openssl,

Вы можете проверить это с pg_config (если вы не установили PostgreSQL из исходного кода, вам может потребоваться установить пакет «dev» или «devel» для этого):

pg_config --configure

Выход будет не содержать --with-openssl,

Вполне может быть, что PHP построен с поддержкой SSL, а PostgreSQL — нет.

Поскольку вы говорите, что PostgreSQL скомпилирован с поддержкой SSL, одним из объяснений такого поведения является то, что на вашем компьютере есть несколько установок PostgreSQL, и PHP использует тот, который собран без поддержки SSL. Попробуйте найти все файлы с именем libpq.* в вашей системе!

3

Другие решения

Я столкнулся с той же проблемой при подключении к PostgreSQL на Heroku, используя MAMP с PHP7.2.1. Сохранялось, что «значение sslmode» требует «недопустимо, когда поддержка SSL не скомпилирована», хотя поддержка SSL openSSL и pgsql показала, что включена в phpinfo (). Установка postgresql через homebrew устранила проблему для меня.

brew install postgresql

Хотел опубликовать в случае, если это работает для всех, кто сталкивается с той же проблемой.

0

По вопросам рекламы [email protected]