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), которые были проксированы, конфигурация заключалась в том, чтобы не выполнять аутентификацию сертификата клиента.
- Доступ к https://myhostname.com/ работал и попал в мою серверную часть через балансировщик, возвращая ожидаемый ответ.
- Ожидалось, что доступ к 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
См. Также эти ссылки
Я использовал 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
Это будет работать нормально.