421 Yanlış Yönlendirilmiş İstek


11

Bazen aşağıdaki 421 hatasını alıyorum:

Yanlış Yönlendirilmiş İstek

İstenen ana bilgisayar adı, bu bağlantı için kullanılan Sunucu Adı Gösterimi (SNI) ile eşleşmediğinden, istemcinin bu istek için yeni bir bağlantıya ihtiyacı var.

Ancak, tarayıcı yenilendiğinde hata giderilir ve sayfa normal şekilde yüklenir. Bir dahaki sefere sayfa yüklendiğinde hata ve hata oluşmaz ve bu nedenle desen oldukça rastgele görünür. Görebildiğim tek desen bunun olabileceğidir. Bir sayfayı üstbilgiyi ("Konum:". $ Url) kullanarak yeniden yönlendirdiğimde;

Comodo'dan PozitifSSL Çok Alanlı Sertifikam var. Sunucularım, paylaşılan bir web barındırma hizmetinde Apache olduğundan yapılandırmaya erişimim yok.

Bir etki alanından sayfa yüklüyorum ve sayfa içinde sertifikadaki ikinci bir etki alanına bağlantılar var.

Bu hatayla ilgili okuduğum her şey, bu sorunun çok alanlı bir sertifika olmasıyla ilgili olduğuna işaret ediyor gibi görünüyor.

Ne bilmek istiyorum bu (ve düzeltilebilir) neden olabilir şeylerin web sayfasında (php) kodlama tarafında bir şey varsa veya bir yapılandırma hatası veya muhtemelen bir sunucu hatası ve sadece benim barındırma hizmeti olabilir düzelt.

Benim barındırma hizmeti şimdiye kadar bir şey sağlamak mümkün olmadı ve araştırma böylece tam zamanı olur tam zaman geri çağrı istedi. Bunu anlayabileceklerinden çok emin olmadığım için herhangi bir yardım takdir edilecektir.

GÜNCELLEME Tamam, neredeyse birkaç yıl sonra ve onunla başa çıkma zamanının geldiğine karar verdim. Görüntü ve javascript sunulan statik etki alanlarımı kaldırarak sorunların çoğunu çözmeyi başardım. Ancak, bu içeriğin bir kısmı için hala ikinci bir alan kullanıyordum ve özellikle Safari bana hala sorun veriyor.

Daha fazla araştırma yaptım ve burada bundan bahseden başka bir makaleye rastladım . Tam olarak @Kevin'in tanımladığı şey. Makale bunun Safari'de gerçekleştiğini doğruladı. Bu nedenle, her alan adı için ayrı sertifikalar almaya karar verdim. Paylaşılan bir ana bilgisayardayım (Webhostinghub) ve artık otomatik olarak yenilenen ücretsiz SSL (AutoSSL) sunduklarını keşfettim. Gerçek olmak iyi görünüyordu. Beni 5 ücretsiz sertifika ile kurdular. Çok uzak çok iyi. Test etmek için statik alanları yeniden etkinleştirmeyi bile deneyebilirim. Tüm bunlar işe yararsa, bonus olarak önyükleme yapmak için $ tasarruf edeceğim ve Temmuz ayında Comodo sertifikalarımın süresinin dolmasına izin vereceğim.


Aynı Apache sunucusunda birden fazla web sitesi mi barındırıyorsunuz ve aynı SSL sertifikasını mı kullanıyorsunuz ve bu alan adları arasında geçiş yaparken hata mı oluyor?
John Hanley

Yanıt EVET ise, her etki alanının IP adresinin aynı sanal sunucuyla eşleşip eşleşmediğini kontrol edin. EVET ise, iki seçeneğiniz vardır (aklıma gelen): 1) Her alan adı için ayrı SSL sertifikaları verin. 2) Her etki alanının web sunucularını farklı sunucularda (farklı IP adresleri) olacak şekilde taşıyın. Paylaşılan barındırma üzerinde olduğunuz göz önüne alındığında, seçenek 1 muhtemelen en iyi çözümdür. Diğer web sunucularına yüklemek için birkaç ücretsiz sertifika vermek üzere Let's Encrypt'i kullanarak bu çözümü test edebilirsiniz.
John Hanley

Barındırma sağlayıcınıza mod_http2'yi devre dışı bırakıp bırakamayacaklarını sorun.
John Hanley

@JohnHanley - yeniden # 1, evet içinde 6 alan adıyla aynı SSL var. Hatanın ne zaman meydana geldiğini söylemek kolay değildir. Ana senaryo, diğer iki alandan içerik (resim ve js) çeken bir alanda olduğumdur. Re # 2: IP adresi kesinlikle aynı - Her alan adının çok daha pahalı olacağı ayrı sertifikalar veriyorum. Let's Encrypt'i inceledim ancak sağlayıcım tarafından desteklenmiyor. Sağlayıcım son 6 ayda ücretsiz sertifika sundu, bu nedenle bu ay yenileme geldiğinde geçiş yapacağım ve ne olacağını göreceğim. Re # 3 - mod_http2'yi devre dışı bırakamazlar. Teşekkürler
mseifert

Aslında, tüm sağlayıcılar özellikle engellemedikçe Let's Encrypt'i destekler. Nereden alırsanız alın SSL sertifikaları aynıdır. Tek fark doğrulama tipidir (DV, OV, EV) ve dosya paketleme / biçimidir. Apache o kadar popüler ki herkes onları destekliyor. Tedarikçiniz kendi sertifikanızı (sertifika ve özel anahtar) yüklemenizi desteklediği sürece, bunları doğrulamak için DNS doğrulamasını kullanabilirsiniz. Kendi sertifikanızı yüklemeyi desteklemiyorlarsa, satıcıları değiştirirdim.
John Hanley

Yanıtlar:


14

Bu, aşağıdaki olay dizisinden kaynaklanır:

  1. Sunucu ve istemci HTTP / 2'yi destekler ve kullanır.
  2. İstemci adresinden bir sayfa istiyor foo.example.com.
  3. TLS anlaşması sırasında, sunucu hem foo.example.comve bar.example.com(ve istemci kabul eder) için geçerli olan bir sertifika sunar . Bu bir joker karakter sertifikası veya SAN sertifikası ile yapılabilir.
  4. İstemci bağlantı isteğinde bulunmak için yeniden kullanır bar.example.com.
  5. Sunucu, alanlar arası bağlantı yeniden kullanımını destekleyemiyor veya istemiyor (örneğin SSL'lerini farklı şekilde yapılandırdığınız ve Apache bir TLS yeniden pazarlamasını zorlamak istediği için) ve HTTP 421'i sunuyor.
  6. İstemci yeni bir bağlantıyla otomatik olarak yeniden denemez (bkz. Örneğin , şu anda düzeltilmiş olan Chrome hatası # 546991 ). İlgili RfC istemci değil, olması gerektiği ya da zorunluluk olduğunu yeniden OLABİLİR söylüyor. Yeniden denememek özellikle kullanıcı dostu değildir, ancak bir hata ayıklama aracı veya HTTP kütüphanesi için istenebilir.

Olay # 6 kontrolünüz dışında, ancak sunucunun yazılımına bağlı olarak # 5 düzeltilebilir olabilir. HTTP 421'in nasıl ve ne zaman gönderileceği hakkında daha fazla bilgi için sunucunuzun HTTP / 2 belgelerine bakın. Alternatif olarak, her etki alanı için ayrı sertifikalar verebilir, ancak bu daha fazla yönetim yükü oluşturur ve buna değmeyebilir. Ayrıca HTTP / 2'yi tamamen kapatabilirsiniz, ancak bu çoğu durumda aşırıya kaçabilir.


Gerçekten tek bir SSL Sertifikası olan bir Comodo PositiveSSL Çok Alanlı sertifikam var. Ayrı sertifikalara gitmek bu noktada önemli bir çaba ve / veya masraftır. Ana problemler, görüntülerime hizmet etmek için statik cookieless alanlara sahip olmaya çalışmaktaydı. Aldığım 421'lerin değerinde değildi. Şimdilik, statik alanları devre dışı bıraktım. Alanlar arasında hala kaynak paylaşımım var, ancak 421'lerin sayısı önemli ölçüde düştü. Şu anda sözde verimliliğe değmez. Bir gün, daha fazla zamanım olduğunda tavsiyeni test edeceğim.
mseifert

Ayrıntılı açıklama için teşekkür ederim. Bu oldukça can sıkıcı bir sorun olsa da (ve büyük ölçüde Safari'yi kullanırken
farkediyorsunuz)

1

Belki bu birisi için yararlı olacaktır.

Apache sanal ana bilgisayar yapılandırmamı HTTPS olarak değiştirmeye çalıştığımda bu bağlantı noktasını aldım ancak bağlantı noktasını 80'den 443'e değiştirdim ve eklemeyi unuttum

   SSLEngine on
   SSLCertificateFile "/opt/lampp/htdocs/localhost.crt"
   SSLCertificateKeyFile "/opt/lampp/htdocs/localhost.key"

Hata 421'e neden olan yapılandırma:

<VirtualHost mydoamin.local:443>   <-- fistly I 
       DocumentRoot "/opt/lampp/htdocs/mydomain/"
       ServerName www.mydomain.local
</VirtualHost>

Doğru yapılandırma:

<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>

0

Aynı sorunu Debian 10'u Apache ile kullanan bazı web sitelerinde Safari (Masaüstü ve iPhone) ile de gözlemledik.

Yazılım:

  • Debian 10
  • HTTP / 2 ile Apache2 2.4.38-3 + deb10u3
  • Php-fpm ile PHP 7.3.14-1 ~ deb10u1

Alan adları:

  • www.example.com
  • a.example.com
  • b.example.com
  • tüm alan adları aynı DocumentRoot'u gösteriyor

Sertifika:

  • Kullanılan tüm alanlar için bir sertifika
  • İhraççı DFN PKI

Çözüm oldukça kolaydı ama bulmak çok çaba harcadı. Sonunda deneme yanılma yöntemiydi.

Hata 421'e neden olan yapılandırma:

    # 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

Çalışma yapılandırması:

    # 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

Çözüm (bizim durumumuzda): Aynı sertifikayı ve özel anahtarı farklı konumlara kopyalamak yasaktır!

Sertifikayı VirtualHost'a özgü bir dizine kopyalamadan önce. Bu, yalnızca Safari'de Yanlış Yönlendirilmiş İstek davranışıyla sonuçlanır .

Ne yazık ki, size açıklayamam, neden :-( (Apache2 hatası? Safari hatası? Safari özelliği?)


-1

Aynı sorunu yaşadım. İki tek yuvalı SSL'ye geçmek işe yaradı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.