我在 Debian Jessie 上有一个服务器,使用 OpenSSL 1.0.1t 2016 年 5 月 3 日。
我想将 OpenSSL 更新到 1.0.2 并设置自定义 DH 参数。
所以我添加了向后移植到sources.list
,并安装新的 OpenSSL 版本
apt-get -t jessie-backports install openssl
安装后重新启动 Apache,但在 phpinfo 上我可以看到错误的 OpenSSL 标头版本:
PHP Version 7.0.17-1~dotdeb+8.1
OpenSSL Library Version OpenSSL 1.0.2k 26 Jan 2017
OpenSSL Header Version OpenSSL 1.0.1t 3 May 2016
Openssl default config /usr/lib/ssl/openssl.cnf
我该如何解决这个问题?
编辑 - 斯蒂芬·基特的更多信息
出了点问题,标题是我唯一的线索。
阿帕奇:
apachectl -V
Server version: Apache/2.4.10 (Debian)
Server built: Feb 24 2017 18:40:28
Server's Module Magic Number: 20120211:37
Server loaded: APR 1.5.1, APR-UTIL 1.5.4
Compiled using: APR 1.5.1, APR-UTIL 1.5.4
Architecture: 64-bit
Server MPM: prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/etc/apache2"
-D SUEXEC_BIN="/usr/lib/apache2/suexec"
-D DEFAULT_PIDLOG="/var/run/apache2.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="mime.types"
-D SERVER_CONFIG_FILE="apache2.conf"
开放式SSL
openssl version -a
OpenSSL 1.0.2k 26 Jan 2017
built on: reproducible build, date unspecified
platform: debian-amd64
options: bn(64,64) rc4(16x,int) des(idx,cisc,16,int) blowfish(idx)
compiler: gcc -I. -I.. -I../include -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -DL_ENDIAN -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -Wl,-z,relro -Wa,--noexecstack -Wall -DMD32_REG_T=int -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DRC4_ASM -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM
OPENSSLDIR: "/usr/lib/ssl"
将 DH 参数添加到 ssl.conf 后,我收到错误
SSLOpenSSLConfCmd DHParameters /etc/ssl/private/dhparams.pem
阿帕奇重启
service apache2 restart
Job for apache2.service failed. See 'systemctl status apache2.service' and 'journalctl -xn' for details.
systemctl 状态 apache2.service
● apache2.service - LSB: Apache2 web server
Loaded: loaded (/etc/init.d/apache2)
Drop-In: /lib/systemd/system/apache2.service.d
└─forking.conf
Active: failed (Result: exit-code) since wto 2017-03-28 16:25:26 CEST; 11s ago
Process: 43828 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS)
Process: 51393 ExecReload=/etc/init.d/apache2 reload (code=exited, status=0/SUCCESS)
Process: 43857 ExecStart=/etc/init.d/apache2 start (code=exited, status=1/FAILURE)
mar 28 16:25:26 domain.com apache2[43857]: Starting web server: apache2 failed!
mar 28 16:25:26 domain.com apache2[43857]: The apache2 configtest failed. ... (warning).
mar 28 16:25:26 domain.com apache2[43857]: Output of config test was:
mar 28 16:25:26 domain.com apache2[43857]: AH00526: Syntax error on line 54 of /etc/apache2/mods-enabled/ssl.conf:
mar 28 16:25:26 domain.com apache2[43857]: Invalid command 'SSLOpenSSLConfCmd', perhaps misspelled or defined by a module not included in the server configuration
mar 28 16:25:26 domain.com apache2[43857]: Action 'configtest' failed.
mar 28 16:25:26 domain.com apache2[43857]: The Apache error log may have more information.
mar 28 16:25:26 domain.com systemd[1]: apache2.service: control process exited, code=exited status=1
mar 28 16:25:26 domain.com systemd[1]: Failed to start LSB: Apache2 web server.
mar 28 16:25:26 domain.com systemd[1]: Unit apache2.service entered failed state.
答案1
标头是由libssl-dev
包提供的,所以你可以尝试
apt-get -t jessie-backports install libssl-dev
(顺便说一句,openssl
这只是openssl
命令行前端;OpenSSL 库位于libssl1.0.0
包中。)
然而,我怀疑“OpenSSL 标头版本”信息在构建时存储在 PHP 模块中,因此升级 OpenSSL 不会改变它。反正没关系,升级一下库就够了。
SSLOpenSSLConfCmd
仅适用于 httpd 2.4.8 及更高版本(如果是)编译的使用 OpenSSL 标头 1.0.2 或更高版本。这是一个不能仅通过升级库来改进功能的例子。您还需要升级标头并重建mod_ssl
。