Apache сообщает о "недопустимом протоколе" при использовании TLSv1.3 с установленным OpenSSL 1.1.1b

Я пытаюсь проверить поддержку 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 и использую Amazon Linux 2, который ограничен OpenSSL 1.0.2k, поэтому я вручную загрузил и скомпилировал 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

В настоящее время я использую 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)"

Наконец, я попытался удалить Apache (через Yum) и переустановить его (через Yum), но это, похоже, дало нулевой эффект.

Я все еще относительно новичок в компиляции из исходного кода, поэтому я просто не уверен, когда это требуется, кроме обстоятельств, которые есть у нас с версиями OpenSSL, поэтому я не уверен, что причина, по которой я попал в эту стену, в том, что мне нужно перекомпилировать httpd из исходного кода и вручную указать новое местоположение OpenSSL или как?

Любая помощь будет принята с благодарностью!

1 ответ

Решение

Установленная вами версия 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 системы.

Другие вопросы по тегам