ouc*_*cil 3 apache ssl openssl centos7 tls1.3
我正在尝试测试 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.
Run Code Online (Sandbox Code Playgroud)
我在 EC2 上并使用 Amazon Linux 2,它仅限于 OpenSSL 1.0.2k,因此我手动下载并编译了 OpenSSL 1.1.1b,并将其安装在/usr/local/openssl/中,保持原始版本不变。为了确保今后使用新的,我采取了以下步骤......
创建/etc/ld.so/conf.d/openssl.conf作为/usr/local/openssl/lib
内容,然后运行ldconfig -v
更新它。
使用以下内容创建了/etc/profile.d/openssl.sh ...
#Set OPENSSL_PATH
OPENSSL_PATH="/usr/local/openssl/bin"
export OPENSSL_PATH
PATH=$PATH:$OPENSSL_PATH
export PATH
Run Code Online (Sandbox Code Playgroud)
...然后跑去source /etc/profile.d/openssl.sh
更新它。
我可以确认它which openssl
正确地指向,并且使用.../usr/local/openssl/bin/openssl
来确认 TLSv1.3 支持是否存在。/usr/local/openssl/bin/openssl ciphers -V -tls1_3 -s
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
Run Code Online (Sandbox Code Playgroud)
运行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
Run Code Online (Sandbox Code Playgroud)
我目前使用的是 Apache v2.4.39,它应该支持 TLSv1.3,并且我的 SSL 相关指令httpd.conf
设置如下:
### 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)"
Run Code Online (Sandbox Code Playgroud)
最后,我尝试删除 Apache(通过 Yum)并重新安装它(通过 Yum),但这似乎效果为零。
我对从源代码进行编译还比较陌生,所以我只是不确定什么时候需要它,除了 OpenSSL 版本的情况之外,所以我不确定我碰上这堵墙的原因是否是我需要从源代码重新编译 httpd 并手动定位新的 OpenSSL 位置还是什么?
任何帮助将不胜感激!
您安装的 Apache 版本与系统 OpenSSL 库链接,即 OpenSSL 1.0.2k。该库不支持 TLS 1.3,这也意味着配置 TLS 1.3 所需的必要功能不可用,因此无法从 Apache 使用。
如果您只安装 TLS 1.3,这一点不会改变。首先,Apache将继续使用原来路径中安装的库。即使您替换此库,Apache 也无法使用 TLS 1.3 特定功能,因为它一开始并不知道这些功能可用。
相反,Apache 需要针对新的 OpenSSL 版本进行重建,以便了解 API 中的更改并使用它。使用简单的删除和重新安装yum
不会导致此类重建,而只会重新安装与系统 OpenSSL 版本链接的版本。
归档时间: |
|
查看次数: |
14357 次 |
最近记录: |