我正在尝试测试对TLSv1.3的支持,而Apache无法从systemctl status httpd
的以下输出开始...
systemd[1]: Starting The Apache HTTP Server...
httpd[6001]: AH00526: Syntax error on line 100 of /etc/httpd/conf/httpd.conf:
httpd[6001]: SSLProtocol: Illegal protocol 'TLSv1.3'
systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
systemd[1]: Failed to start The Apache HTTP Server.
systemd[1]: Unit httpd.service entered failed state.
systemd[1]: httpd.service failed.
我正在使用EC2并使用限于OpenSSL 1.0.2k的Amazon Linux 2,因此我手动下载并编译了OpenSSL 1.1.1b,并将其安装在 / usr / local / openssl / 保持原样。为确保新版本继续使用,我采取了以下步骤...
使用/usr/local/openssl/lib
作为内容创建 /etc/ld.so/conf.d/openssl.conf ,然后运行ldconfig -v
对其进行更新。 / p>
使用以下内容创建了 /etc/profile.d/openssl.sh ...
#Set OPENSSL_PATH
OPENSSL_PATH="/usr/local/openssl/bin"
export OPENSSL_PATH
PATH=$PATH:$OPENSSL_PATH
export PATH
...并运行source /etc/profile.d/openssl.sh
进行更新。
我可以确认which openssl
正确指向/usr/local/openssl/bin/openssl
,并使用/usr/local/openssl/bin/openssl ciphers -V -tls1_3 -s
...来提供TLSv1.3支持。
0x13,0x02 - TLS_AES_256_GCM_SHA384 TLSv1.3 Kx=any Au=any Enc=AESGCM(256) Mac=AEAD
0x13,0x03 - TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any Au=any Enc=CHACHA20/POLY1305(256) Mac=AEAD
0x13,0x01 - TLS_AES_128_GCM_SHA256 TLSv1.3 Kx=any Au=any Enc=AESGCM(128) Mac=AEAD
运行openssl version -a
会产生以下结果……
OpenSSL 1.1.1b 26 Feb 2019
built on: Wed May 15 15:07:48 2019 UTC
platform: linux-x86_64
options: bn(64,64) rc4(16x,int) des(int) idea(int) blowfish(ptr)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPADLOCK_ASM -DPOLY1305_ASM -DZLIB -DNDEBUG
OPENSSLDIR: "/usr/local/openssl"
ENGINESDIR: "/usr/local/openssl/lib/engines-1.1"
Seeding source: os-specific
我当前正在使用Apache v2.4.39,该版本应该支持TLSv1.3,并且httpd.conf
中与SSL相关的指令设置如下:
### SSL CONFIGURATION
# Session settings
SSLSessionCache shmcb:/run/httpd/sslcache(512000)
SSLSessionCacheTimeout 300
SSLProtocol -all +TLSv1.3 +TLSv1.2
SSLProxyProtocol -all +TLSv1.3 +TLSv1.2
SSLCipherSuite TLSv1.3 TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256
SSLCipherSuite SSL ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256
SSLHonorCipherOrder on
SSLCompression off
SSLSessionTickets off
# OpenSSL Configuration Commands
SSLOpenSSLConfCmd DHParameters /etc/ssl/dhparam.pem
SSLOpenSSLConfCmd Curves X25519:secp521r1:secp384r1:prime256v1
# Pseudo Random Number Generator (PRNG):
SSLRandomSeed startup file:/dev/urandom 256
SSLRandomSeed connect builtin
# SSL Crypto Device
SSLCryptoDevice builtin
# HSTS / Header Strict Transport Security
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header always set X-Frame-Options SAMEORIGIN
Header always set X-Content-Type-Options nosniff
# Online Certificate Status Protocol (OCSP) Stapling
SSLUseStapling On
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"
最后,我尝试删除Apache(通过Yum)并重新安装(通过Yum),但这似乎无效。
对于从源代码进行编译,我还是一个相对较新的人,所以除了不确定像使用OpenSSL版本那样的情况外,我只是不确定何时需要它,所以我不确定是否碰壁的原因是我需要从源代码重新编译httpd并手动定位新的OpenSSL位置还是什么?
任何帮助将不胜感激!
答案 0 :(得分:1)
您已安装的Apache版本已与系统OpenSSL库链接,即OpenSSL 1.0.2k。该库不支持TLS 1.3,这也意味着配置TLS 1.3所需的必要功能不可用,因此无法从Apache使用。
如果仅安装TLS 1.3,这不会改变。首先,Apache将继续使用原始路径中安装的库。即使您替换了该库,Apache也将无法使用TLS 1.3特定的功能,因为它不知道这些功能最初是可用的。
相反,需要针对新的OpenSSL版本重建Apache,以便了解API中的更改并使用它。使用yum
进行简单的删除并重新安装不会引起这种重建,而只是重新安装与系统OpenSSL版本链接的版本。