Zend-Server 8.5,无法为 PHP 更新 OpenSSL

Zend-Server 8.5, not managed to update OpenSSL for PHP

确实对该主题进行了广泛调查,但仍无法强制 OpenSSL 的新版本在 OSX El Capitan 上与 ZendServer v.8.5.2 一起工作。

Prehistory:默认情况下,ZendServer 和 El Capitan 似乎与 openssl-0.9.8zc 一起使用。 PHP 5.6.15 的新版本不能正常使用此版本的 OpenSSL 和 Composer-PHP。我遇到错误:

Unable to locate a valid CA certificate file. You must set a valid 'cafile' option. A valid CA certificate file is required for SSL/TLS protection. ...

[Composer\Downloader\TransportException]
The configured cafile was not valid or could not be read.

我用 Brew 更新了 OpenSSL 的版本,然后确保它在系统中正确注册:

 brew unlink openssl && brew link --force openssl

但实际上,ZendServer 似乎在二进制文件目录中拥有自己的 openssl 库本地副本:

/usr/local/zend/bin/openssl

openssl.cafile 是空的,所以我决定将它指向新路径,正如某些教程中所推荐的那样:usr/local/etc/openssl/cert.pem

结果:

系统似乎指向正确版本的 openssl:

$ openssl version
OpenSSL 1.0.2f  28 Jan 2016
$ openssl version -d
OPENSSLDIR: "/usr/local/etc/openssl"

同时which指向zend的OpenSSL版本:

$ which -a openssl
/usr/local/zend/bin/openssl
/usr/local/bin/openssl
/usr/bin/openssl

和PHP它似乎仍然有旧的默认配置,通过我的系统中不再存在的路径:

$ php -i | grep openssl
Configure Command =>  './configure'  '--prefix=/usr/local/zend' '--with-config-file-path=/usr/local/zend/etc' '--with-config-file-scan-dir=/usr/local/zend/etc/conf.d' '--disable-debug' '--enable-inline-optimization' '--disable-all' '--enable-libxml' '--enable-session' '--enable-spl' '--enable-xml' '--enable-hash' '--enable-reflection' '--with-pear' '--with-apxs2=/usr/local/zend/apache2/bin/apxs' '--with-layout=GNU' '--enable-filter' '--with-pcre-regex' '--with-zlib' '--enable-simplexml' '--enable-dom' '--with-libxml-dir=/usr/local' '--with-openssl=/usr/local/openssl-0.9.8zc' '--enable-pdo' '--with-pdo-sqlite' '--with-pdo-mysql=mysqlnd' '--with-libedit' '--with-pdo-pgsql' '--with-iconv' '--with-sqlite3' '--disable-phar' '--enable-xmlwriter' '--enable-xmlreader' '--enable-mysqlnd' '--enable-json' 'CC=gcc' 'CFLAGS=-fPIC '-O2' '-pipe' '-g' '-fno-common' '-g'' 'CPPFLAGS=-fPIC 'CXXFLAGS=-fPIC 'CXX=g++' 'LDFLAGS='
openssl
Openssl default config => /usr/local/openssl-0.9.8zc/ssl/openssl.cnf
openssl.cafile => /usr/local/etc/openssl/cert.pem => /usr/local/etc/openssl/cert.pem
openssl.capath => no value => no value

我还没有找到任何方法来更改 Zend Server 8.5.2 中 PHP 的默认 Zend OpenSSL 配置,并指出它到 OSX.

中的新 OpenSSL

Composer 仍然抛出同样的错误并且不起作用。 我在这里和那里爬了 Whosebug,还没有找到适合我的解决方案。任何帮助将不胜感激。

谢谢!


我自己的回答:看起来,当PHP被编译时,那些库被内置到PHP中,所以升级SSL lib文件不会'没有任何效果 除非 PHP 被重新编译 。在我看来,没有办法更新 ZendServer 中的 OpenSSL 库,除非下载更新的版本(没有更新的版本)。

经过几天的调查,似乎没有办法在 ZendServer 中更新 OpenSSL for PHP -编译 PHP 和库。所以这个问题似乎无法回答。没有简单的方法来做到这一点。您仍将拥有 OpenSSL 的系统版本,它与使用 PHP.

预编译的版本不同

我放弃了在 ZendServer 中为 PHP 升级 OpenSSL 的想法,因为它内置于 PHP 本身。相反,我回滚了我的配置和 ZendServer 设置,因此它至少以某种方式与旧版本的 OpenSSL 一起工作。


它在某些情况下也可能有帮助,无需重新安装:to manually update certificates

  1. 已从 http://curl.haxx.se/ca/cacert.pem
  2. 下载 cacert.pem
  3. 复制cacert.pem'/usr/local/zend/etc/ssl/certs/'
  4. 修改CURL配置(Zend Server Configuration -> PHP -> CURL)并更改:

curl.cainfo = '/usr/local/zend/etc/ssl/certs/cacert.pem'

  1. 重新启动 PHP 并检查 CURL 是否可以从 HTTPS URL.
  2. 读取

可以在文章中找到更多信息 Fixing the expired intermediate certificate on Mac OS X