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.

我在 EC2 上并使用仅限于 OpenSSL 1.0.2k 的 Amazon Linux 2,因此我手动下载并编译了 OpenSSL 1.1.1b,并将其安装在/usr/local/openssl/中,原样保持不变。为了确保继续使用新的,我采取了以下步骤......

  1. 创建/etc/ld.so/conf.d/openssl.conf作为内容,/usr/local/openssl/lib然后运行ldconfig -v更新它。

  2. 使用以下内容创建/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,并且 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

运行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

我目前正在使用应该支持 TLSv1.3 的 Apache v2.4.39,并且我的 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)"

最后,我尝试删除 Apache(通过 Yum)并重新安装(通过 Yum),但这似乎效果为零。

我对从源代码编译还比较陌生,所以我只是不确定什么时候需要它,而不是像我们使用 OpenSSL 版本那样的情况,所以我不确定我碰到这堵墙的原因是否是我需要从源代码重新编译 httpd 并手动定位新的 OpenSSL 位置还是什么?

任何帮助将不胜感激!

4

1 回答 1

4

您安装的 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 版本链接的版本。

于 2019-05-16T18:28:42.263 回答