首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP & SSL - sslmode值"require“在未编译PostgreSQL支持时无效

PHP & SSL - sslmode值"require“在未编译PostgreSQL支持时无效
EN

Stack Overflow用户
提问于 2018-05-10 19:48:01
回答 2查看 3.3K关注 0票数 4

我正在尝试连接Heroku Postgres,它只支持SSL连接。SSL连接在其他工具(Postico)和编程环境(Node.js)中工作得很好,但是当从PHP连接时,我总是得到这个错误:sslmode value "require" invalid when SSL support is not compiled

我的本地环境是OS,所有的软件包都与自制软件一起安装,并支持SSL。另外,pgsql还支持基于phpinfo()的SSL输出:SSL support => enabled

Libpq和Postgres是使用SSL支持进行编译的:-lpgcommon -lpgport -lssl -lcrypto -lz -lreadline -lm

PHP版本: 7.2.5 (也尝试了5.6、7.1分支) Local Postgres和libpq版本: 10.3

我尝试了所有的解决方案,但都不能让这个连接正常工作。通过自制软件安装时,Postgres支持为PHP 7.2.5提供开箱即用的编译。不再有单独的php-pgsql/php-pdo-pgsql包。

EN

回答 2

Stack Overflow用户

发布于 2018-05-18 18:22:11

错误消息很清楚,它来自PostgreSQL的libpq中的以下代码

代码语言:javascript
复制
#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”包):

代码语言:javascript
复制
pg_config --configure

输出将不包含--with-openssl

很可能PHP是用SSL支持构建的,而PostgreSQL不是。

既然您说PostgreSQL是在支持SSL的情况下编译的,那么这种行为的一种解释是您的机器上有多个PostgreSQL安装,而PHP所使用的是在没有SSL支持的情况下构建的安装。尝试查找系统中所有名为libpq.*的文件!

票数 4
EN

Stack Overflow用户

发布于 2018-12-22 13:24:19

我在Heroku上使用MAMP和PHP7.2.1连接到PostgreSQL时也遇到了同样的问题。尽管openSSL和pgsql SSL支持在phpinfo()中显示为启用,但仍然得到"sslmode value“要求”当SSL支持未编译时无效“。通过homebrew安装postgresql为我解决了这个问题。

代码语言:javascript
复制
brew install postgresql

我想发帖,以防其他遇到同样问题的人也能用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50272266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档