Apache 2.4.37 с openssl 1.1.1: не может выполнить аутентификацию после рукопожатия

Я обновил apache до последней версии 2.4.37 и openssl до 1.1.1, и теперь, когда клиент аутентифицируется, я получаю эту ошибку только с Firefox 63, но не в Chrome:

[ssl:error] AH: verify client post handshake, referer: https://******/login
[ssl:error] AH10158: cannot perform post-handshake authentication, referer: https://******/login
[ssl:error]SSL Library Error: error:14268117:SSL routines:SSL_verify_client_post_handshake:extension not received

Я использовал wireshark, чтобы попытаться найти проблему, и я ценю, что Firefox использует TLS 1.3, а Chrome использует TLS 1.2. Фактически, если я устанавливаю максимальную версию TLS в FF на TLS 1.2, она работает нормально.

Я хотел бы получить совместимость с TLS 1.3 или, если это пока невозможно, принудительно в моей конфигурации Apache клиент всегда использует TLS 1.2, но я не получаю его:(

Это мой конфигурационный файл apache vhost:

[...]

SSLEngine on
SSLCertificateFile      /etc/apache2/ssl/server.crt
SSLCertificateKeyFile   /etc/apache2/ssl/server.key
SSLCertificateChainFile /etc/apache2/ssl/intermediate.crt
SSLCACertificateFile /etc/apache2/ssl/ca.pem
SSLVerifyDepth 3
SSLProtocol TLSv1.2
SSLHonorCipherOrder on

<Directory /var/www/html/>
    Options -Indexes +FollowSymLinks -MultiViews
    AllowOverride All
    Order deny,allow
    Allow from 10.55.12.0/24
    Deny from all
</Directory>

<Files "login-ssl.php">
    SSLVerifyClient optional
    SSLOptions +StdEnvVars +StrictRequire
</Files>

[...]

Может кто-то помочь мне, пожалуйста?

Благодарю.


отредактированный

Я нашел решение. Директива SSLProtocol должна находиться в /etc/apache2/mods-enabled/ssl.conf.

0 ответов

Проблема в том, что Firefox не поддерживает аутентификацию TLS 1.3 после рукопожатия. Я сообщил об этой проблеме в Firefox на https://bugzilla.mozilla.org/show_bug.cgi?id=1511989

Я не предлагаю обходной путь или исправить здесь; Я просто рассказываю другим, кто сталкивался с этой страницей (как это часто бывает для этого сообщения об ошибке в результатах поиска), какова ситуация и где найти самую свежую информацию, поскольку Firefox работает над решением этой проблемы.

В случае, если это помогает другим, для моей конфигурации тестирования обратного прокси с Apache HTTP 2.4.41 в Windows я хотел защитить только URI балансировщика-менеджера с аутентификацией сертификата клиента, который я сгенерировал с помощью OpenSSL с сертификатами CA, сертификатами сервера, подписанными CA и сертификат клиента, подписанный CA, импортировали P12 в мой браузер.

Для других моих внутренних URL-адресов (Spring Boot с включенным AJP и запуском того же приложения на 2 разных наборах портов для тестирования балансировки через Apache HTTP), которые были проксированы, конфигурация заключалась в том, чтобы не выполнять аутентификацию сертификата клиента.

  1. Доступ к https://myhostname.com/ работал и попал в мою серверную часть через балансировщик, возвращая ожидаемый ответ.
  2. Ожидалось, что доступ к https://myhostname.com/balancer-manager предложит мне выбрать сертификат клиента, который я импортировал ранее, но выдал эту ошибку в Chrome 80.0 (и не работал для других браузеров).

Запрещено У вас нет разрешения на доступ к этому ресурсу. Причина: невозможно выполнить аутентификацию после установления связи.

В журнале ошибок Apache он показал:

Ошибка библиотеки SSL: ошибка:14268117: подпрограммы SSL:SSL_verify_client_post_handshake: расширение не получено

В журнале доступа Apache было показано:

GET / балансировщик-менеджер HTTP/1.1" 403 199

Нерабочая конфигурация конфигурации виртуального хоста в httpd.conf выглядела так:

<VirtualHost *:443>

    ServerName myhostname.com
    ServerAlias myhostname.com

    SSLEngine on
    SSLCipherSuite ALL:!EXP:!eNULL:!aNULL:!MD5:-LOW:-RC4:-SSLv2:+HIGH:+MEDIUM

    #no certificate authentication required except balancer manager
    SSLVerifyClient none
    SSLVerifyDepth 5
    SSLProtocol all -SSLv3
    SSLCertificateFile "path/to/server/certificate"
    SSLCertificateKeyFile "path/to/server/key"
    SSLCACertificateFile "path/to/CA/certificate"

    <Location "/balancer-manager">
            SSLVerifyClient require
            SetHandler balancer-manager
            Require host myhostname.com
    </Location>


    <Proxy balancer://cluster>
        BalancerMember  ajp://localhost:9090/ loadfactor=25 timeout=1
        BalancerMember  ajp://localhost:9091/ loadfactor=75 timeout=1
        ProxySet lbmethod=byrequests
    </Proxy>

    ProxyPreserveHost off

    ProxyRequests Off
    ProxyPass         /  balancer://cluster/  stickysession=JSESSIONID
    ProxyPassReverse  /  balancer://cluster/  stickysession=JSESSIONID

</VirtualHost>

Чтобы решить эту проблему, измените директиву SSLProtocol на использование:

SSLProtocol -all +TLSv1.2

См. Также эти ссылки

  1. Включить TLS в Apache

  2. ТЛС-1-2

Я использовал TLS 1.2 для тестов (TLS 1.1 тоже работал, но рекомендовал использовать TLS 1.2 или более позднюю версию).

Примечание. Apache версии 2.4.38 или более поздней версии поддерживает TLS v1.3. Перед включением TLS 1.3 в настройках SSL необходимо обновить пакеты Apache.

*

Это сработало для меня!

используйте команду ниже, чтобы открыть каталоги Linux

sudo nautilus

затем перейдите к

/etc/apache2/mods-enabled/ssl.conf

Откройте ssl.conf, и вы найдете что-то вроде этого

# Протоколы для включения.

# Доступные значения: все, SSLv3, TLSv1, TLSv1.1, TLSv1.2

#SSL v2 больше не поддерживается

SSLProtocol all -SSLv3

Просто замените SSLv3 на TLSv1.3, как показано ниже:

SSLProtocol all -TLSv1.3

Затем перезапустите сервер Apache, используя команду ниже

sudo service apache2 restartЭто будет работать нормально.

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