Назад | Перейти на главную страницу

Ошибка Request Entity Too Large при загрузке файлов размером более 128 КБ через SSL

У нас есть настройка веб-портала на платформе Java Spring. Он работает на сервере приложений Tomcat. Портал обслуживается через веб-сервер apache, подключенный к tomcat через соединитель JK. Весь портал поддерживает HTTPS, используя 443 порт apache. Версия Apache: Apache / 2.4.2 (Unix). это последняя стабильная версия веб-сервера Apache.

Всякий раз, когда мы пытаемся загрузить на портал файлы размером более 128 КБ, мы сталкиваемся с ошибкой 413:

Request Entity Too Large The requested resource /teamleadchoachingtracking/doFileUpload does not allow request data with POST requests, or the amount of data provided in the request exceeds the capacity limit.

В журнале ошибок apache мы получаем следующие ошибки:

AH02018: request body exceeds maximum size (131072) for SSL buffer
AH02257: could not buffer message body to allow SSL renegotiation to proceed

Мы провели поиск в Google, и были предложения установить SSLRenegBufferSize как какое-то высокое значение, например 10 МБ. Основываясь на этих предложениях, мы поместили следующую запись в раздел virtualhost конфигурационного файла httpd:

<Directory "/teamleadchoachingtracking/doFileUpload/">
SSLRenegBufferSize 10486000
</Directory>

Но по-прежнему ошибка сохраняется. Также мы не указали SSLVerifyClient none, но повторное согласование все еще происходит.

Это очень непоследовательная и неприятная ошибка. Любая помощь будет принята с благодарностью. Спасибо заранее.

Мне удалось решить эту проблему, поместив определенную конфигурацию в файл apache httpd.conf. Вот пример конфигурации:

<Location "/calibration">
  SSLRenegBufferSize 10486000
</Location>

Раньше я не давал правильную конфигурацию. Ключ - это точное местоположение URL-адреса, которое вызывает ошибку http 413. В директиве location необходимо указать точное местоположение URL. SSLRenegBufferSize - это параметр, который указывает максимальный размер буфера в байтах на случай повторного согласования. Я установил 10 МБ. По умолчанию Apache составляет 128 КБ.

Эта проблема возникает во время повторного согласования SSL. Помимо установки очень большого размера буфера повторного согласования в Apache, у вас есть еще несколько вариантов:

  • Настройте свой (виртуальный) хост на использование только одной схемы аутентификации, чтобы избежать повторного согласования всех вместе
  • Используйте клиент, поддерживающий HTTP 1.1 Expect Header

Видеть https://stackoverflow.com/questions/14281628/ssl-renegotiation-with-client-certificate-causes-server-buffer-overflow

Насколько я видел на своем сервере ubuntu 14.04 / apache 2.4, если вы используете .htaccess конфигурация apache, SSLVerifyDepth параметр также запускает обновление SSL даже если SSLVerifyClient является none. Используя SSLVerifyDepth строка конфигурации также обойти SSLRenegBufferSize стоимость вы могли установить для этого каталога и всех подкаталогов.

Есть кое-что о разнице между использованием SSLVerifyDepth в контексте сервера и в контексте каталога в документация. Таким образом, я предполагаю, что это проблемное поведение будет таким же, как и с <directory> строки конфигурации. После внимательного прочтения в документе также говорится, что этот параметр заставит отступника ...

Это решение сработало для меня:

  • положить SSLVerifyDepth в вашем основном ssl.conf или в конфигурации вашего виртуального хоста, SSLVerifyDepth 5 должны соответствовать подавляющему большинству цепочек сертификатов основных поставщиков сертификатов.

  • положить SSLRenegBufferSize нужного размера в .htaccess или в <directory> конфигурация для каждого каталога.