PHP & PostgreSQL - значение sslmode "require" недопустимо, когда поддержка SSL не скомпилирована - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь подключиться к 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.

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018

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

brew install postgresql

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

0 голосов
/ 18 мая 2018

Сообщение об ошибке ясно, оно приходит из этого кода в 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.* в вашей системе!

...