Иногда я получаю следующую ошибку 421:
Неверный запрос
Клиенту требуется новое соединение для этого запроса, так как запрошенное имя хоста не совпадает с указанием имени сервера (SNI), используемым для этого соединения.
Однако обновление браузера устраняет ошибку, и страница загружается нормально. В следующий раз загрузка страницы не приведет к ошибке, и поэтому шаблон кажется довольно случайным. Единственная закономерность, которую я вижу, это то, что это может произойти, когда я перенаправляю страницу с помощью заголовка ("Location:". $ Url);
У меня есть многодоменный сертификат PositiveSSL от Comodo. Мои серверы - это Apache на общем веб-хостинге, поэтому у меня нет доступа к конфигурации.
Я загружаю страницы из одного домена, и внутри страницы есть ссылки на второй домен в сертификате.
Все, что я читал об этой ошибке, похоже, указывает на то, что эта проблема связана с тем, что это многодоменный сертификат.
Я хотел бы знать, есть ли что-нибудь на стороне кодирования веб-страницы (php), что может вызвать это (и может быть исправлено), или это ошибка конфигурации или, возможно, ошибка сервера, и только моя служба хостинга может почини это.
Моя служба хостинга до сих пор не могла ничего предоставить и просила перезвонить с указанием точного времени, когда это произойдет в следующий раз, чтобы они могли это выяснить. Любая помощь будет оценена, поскольку я не слишком уверен, что они смогут это понять.
ОБНОВИТЬ Ок, почти пару лет спустя решил, что пора с этим разобраться. Мне удалось решить большинство проблем, удалив свои статические домены, которые обслуживали изображения и javascript. Однако я все еще использовал второй домен для некоторой части этого контента, и, в частности, Safari по-прежнему вызывал у меня проблемы.
Я провел дополнительное исследование и наткнулся на другую статью, говорит об этом здесь. В точности то, что описывает @Kevin. В статье подтверждено, что это происходит в Safari. Поэтому, следуя совету, я приступил к получению отдельных сертификатов для каждого домена. Я нахожусь на общем хосте (Webhostinghub) и обнаружил, что теперь они предлагают бесплатный SSL (AutoSSL), который обновляется автоматически. Это звучало неплохо, чтобы быть правдой. Они установили мне 5 бесплатных сертификатов. Все идет нормально. Я могу даже попытаться повторно включить статические домены для тестирования. Если все это сработает, я сэкономлю $ для загрузки в качестве бонуса и позволю истечению срока действия моих сертификатов Comodo в июле.
Это вызвано следующей последовательностью событий:
foo.example.com
.foo.example.com
и bar.example.com
(и клиент принимает это). Это может быть сделано с помощью подстановочного сертификата или сертификата SAN.bar.example.com
.Событие №6 находится вне вашего контроля, но в зависимости от программного обеспечения сервера, №5 может быть исправлено. Обратитесь к документации вашего сервера по HTTP / 2 для получения дополнительной информации о том, как и когда он отправляет HTTP 421. В качестве альтернативы вы можете выпустить отдельные сертификаты для каждого домена, но это создает дополнительные административные издержки и может не стоить того. Вы также можете полностью отключить HTTP / 2, но в большинстве случаев это, вероятно, излишне.
Может, это кому-то будет полезно.
Я получил эту ошибку, когда попытался изменить конфигурацию виртуального хоста apache на HTTPS, но только изменил порт с 80 на 443 и забыл добавить
SSLEngine on
SSLCertificateFile "/opt/lampp/htdocs/localhost.crt"
SSLCertificateKeyFile "/opt/lampp/htdocs/localhost.key"
Конфигурация, вызывающая ошибку 421:
<VirtualHost mydoamin.local:443> <-- fistly I
DocumentRoot "/opt/lampp/htdocs/mydomain/"
ServerName www.mydomain.local
</VirtualHost>
Правильная конфигурация:
<VirtualHost mydoamin.local:443>
DocumentRoot "/opt/lampp/htdocs/mydomain/"
ServerName www.mydomain.local
SSLEngine on
SSLCertificateFile "/opt/lampp/htdocs/localhost.crt"
SSLCertificateKeyFile "/opt/lampp/htdocs/localhost.key"
</VirtualHost>
Мы наблюдали ту же проблему с Safari (настольный компьютер и iPhone) на некоторых веб-сайтах, использующих Debian 10 с Apache.
Программное обеспечение:
Домены:
Сертификат:
Решение было довольно простым, но потребовалось много усилий, чтобы его найти. В конце концов, это была пробная ошибка.
Конфигурация, вызывающая ошибку 421:
# in /etc/apache2/site-enabled/www.example.com.conf
SSLCertificateFile /etc/apache2/ssl/www.example.com/cert-123.pem
SSLCertificateKeyFile /etc/apache2/ssl/www.example.com/www.example.com.key
# in /etc/apache2/site-enabled/a.example.com.conf
SSLCertificateFile /etc/apache2/ssl/a.example.com/cert-123.pem
SSLCertificateKeyFile /etc/apache2/ssl/a.example.com/www.example.com.key
# in /etc/apache2/site-enabled/b.example.com.conf
SSLCertificateFile /etc/apache2/ssl/b.example.com/cert-123.pem
SSLCertificateKeyFile /etc/apache2/ssl/b.example.com/www.example.com.key
Рабочая конфигурация:
# in /etc/apache2/site-enabled/www.example.com.conf
SSLCertificateFile /etc/apache2/ssl/www.example.com/cert-123.pem
SSLCertificateKeyFile /etc/apache2/ssl/www.example.com/www.example.com.key
# in /etc/apache2/site-enabled/a.example.com.conf
SSLCertificateFile /etc/apache2/ssl/www.example.com/cert-123.pem
SSLCertificateKeyFile /etc/apache2/ssl/www.example.com/www.example.com.key
# in /etc/apache2/site-enabled/b.example.com.conf
SSLCertificateFile /etc/apache2/ssl/www.example.com/cert-123.pem
SSLCertificateKeyFile /etc/apache2/ssl/www.example.com/www.example.com.key
Решение (в нашем случае): нельзя копировать один и тот же сертификат и закрытый ключ в разные места!
Раньше мы копировали сертификат в каталог VirtualHost. Это приводит к Неверный запрос поведение только с Safari.
К сожалению, я не могу вам объяснить, почему :-( (ошибка Apache2? Ошибка Safari? Функция Safari?)
Я была такая же проблема. Переключение на два однослотовых SSL помогло.