421 Yêu cầu sai


10

Thỉnh thoảng tôi gặp lỗi 421 sau:

Yêu cầu sai

Máy khách cần một kết nối mới cho yêu cầu này vì tên máy chủ được yêu cầu không khớp với Chỉ định Tên Máy chủ (SNI) được sử dụng cho kết nối này.

Tuy nhiên, làm mới trình duyệt sẽ xóa lỗi và trang tải bình thường. Lần tiếp theo tải trang sẽ không tạo ra lỗi và do đó mô hình có vẻ khá ngẫu nhiên. Mẫu duy nhất tôi có thể thấy là điều này có thể xảy ra khi tôi chuyển hướng một trang bằng tiêu đề ("Vị trí:". $ Url);

Tôi có Chứng chỉ Đa miền Tích cực từ Comodo. Máy chủ của tôi là Apache trên dịch vụ lưu trữ web được chia sẻ vì vậy tôi không có quyền truy cập vào cấu hình.

Tôi tải các trang từ một tên miền và trong trang là các liên kết đến một tên miền thứ hai trên chứng chỉ.

Tất cả mọi thứ tôi đã đọc liên quan đến lỗi này dường như chỉ ra vấn đề này có liên quan đến việc đây là chứng chỉ đa miền.

Những gì tôi muốn biết là nếu có bất cứ điều gì trên mã hóa trang web (php) của những thứ có thể gây ra điều này (và có thể được sửa chữa) hoặc nếu đó là lỗi cấu hình hoặc có thể là lỗi máy chủ và chỉ có dịch vụ lưu trữ của tôi mới có thể sửa nó.

Dịch vụ lưu trữ của tôi cho đến nay không thể cung cấp bất cứ điều gì và yêu cầu gọi lại với thời gian chính xác xảy ra tiếp theo để họ có thể nghiên cứu. Bất kỳ trợ giúp sẽ được đánh giá cao vì tôi không quá tự tin họ có thể tìm ra điều này.

CẬP NHẬT Ok, gần một vài năm sau đó và quyết định đã đến lúc phải giải quyết nó. Tôi đã có thể giải quyết hầu hết các vấn đề bằng cách xóa các miền tĩnh phục vụ hình ảnh và javascript. Tuy nhiên, tôi vẫn đang sử dụng tên miền thứ hai cho một số nội dung này và đặc biệt Safari vẫn gây ra sự cố cho tôi.

Tôi đã nghiên cứu thêm và tình cờ thấy một bài báo khác nói về nó ở đây . Chính xác những gì @Kevin mô tả. Bài báo đã xác nhận rằng nó xảy ra trong Safari. Vì vậy, nhận lời khuyên, tôi đặt ra về việc nhận các chứng chỉ riêng cho từng miền. Tôi đang sử dụng máy chủ được chia sẻ (Webhostinghub) và phát hiện ra họ hiện cung cấp SSL miễn phí (AutoSSL) tự động gia hạn. Nghe có vẻ tốt là đúng. Họ thiết lập cho tôi 5 chứng chỉ miễn phí. Càng xa càng tốt. Tôi thậm chí có thể thử kích hoạt lại các miền tĩnh để kiểm tra. Nếu tất cả đều hoạt động, tôi sẽ tiết kiệm $ để khởi động như một phần thưởng và để chứng chỉ Comodo của tôi hết hạn vào tháng Bảy.


Bạn có đang lưu trữ nhiều trang web trên cùng một máy chủ Apache VÀ sử dụng cùng một chứng chỉ SSL VÀ lỗi xảy ra khi chuyển đổi giữa các tên miền này?
John Hanley

Nếu câu trả lời là CÓ, hãy kiểm tra xem địa chỉ IP cho mỗi tên miền ánh xạ tới cùng một máy chủ ảo. Nếu CÓ, thì bạn có hai lựa chọn (mà tôi có thể nghĩ đến): 1) Cấp chứng chỉ SSL riêng cho từng tên miền. 2) Di chuyển các máy chủ web cho mỗi tên miền trên các máy chủ khác nhau (địa chỉ IP khác nhau). Cho rằng bạn đang chia sẻ lưu trữ, tùy chọn 1 có lẽ là giải pháp tốt nhất. Bạn có thể kiểm tra giải pháp này bằng cách sử dụng Let Encrypt để cấp một số chứng chỉ miễn phí để cài đặt trên các máy chủ web khác.
John Hanley

Hỏi nhà cung cấp dịch vụ lưu trữ của bạn nếu họ có thể vô hiệu hóa mod_http2.
John Hanley

@JohnHanley - lại là số 1, vâng, đó là cùng một SSL với 6 tên miền trong đó. Không dễ để biết chính xác khi nào xảy ra lỗi. Kịch bản chính là tôi trên một miền kéo nội dung (hình ảnh và js) từ hai miền khác. Re # 2: Địa chỉ IP chắc chắn giống nhau - Tôi tập hợp cấp chứng chỉ riêng cho mỗi tên miền sẽ khá đắt hơn. Tôi đã xem xét Let Encrypt nhưng nó không được nhà cung cấp của tôi hỗ trợ. Nhà cung cấp của tôi trong 6 tháng qua đã cung cấp chứng chỉ miễn phí, vì vậy khi gia hạn trong tháng này, tôi sẽ chuyển đổi và xem điều gì sẽ xảy ra. Re # 3 - họ không thể vô hiệu hóa mod_http2. Cảm ơn
mseifert

Trên thực tế, tất cả các nhà cung cấp đều hỗ trợ Let Encrypt trừ khi họ đặc biệt chặn nó. Chứng chỉ SSL là như nhau cho dù bạn lấy chúng ở đâu. Sự khác biệt duy nhất là loại xác nhận (DV, OV, EV) và bao bì / định dạng tệp. Apache nổi tiếng đến mức mọi người đều ủng hộ họ. Miễn là nhà cung cấp của bạn hỗ trợ bạn tải lên chứng chỉ của riêng bạn (chứng chỉ và khóa riêng), bạn có thể sử dụng xác thực DNS để đi xung quanh họ. Nếu họ không hỗ trợ tải lên chứng chỉ của riêng bạn, thì tôi sẽ chuyển nhà cung cấp.
John Hanley

Câu trả lời:


13

Điều này được gây ra bởi chuỗi các sự kiện sau đây:

  1. Cả máy chủ và máy khách đều hỗ trợ và sử dụng HTTP / 2.
  2. Khách hàng yêu cầu một trang tại foo.example.com.
  3. Trong quá trình đàm phán TLS, máy chủ xuất trình chứng chỉ hợp lệ cho cả hai foo.example.combar.example.com(và khách hàng chấp nhận nó). Điều này có thể được thực hiện với chứng chỉ ký tự đại diện hoặc chứng chỉ SAN.
  4. Khách hàng sử dụng lại kết nối để đưa ra yêu cầu bar.example.com.
  5. Máy chủ không thể hoặc không sẵn lòng hỗ trợ tái sử dụng kết nối tên miền chéo (ví dụ: do bạn đã định cấu hình SSL khác nhau và Apache muốn buộc đàm phán lại TLS) và phục vụ HTTP 421.
  6. Ứng dụng khách không tự động thử lại với kết nối mới (ví dụ: lỗi Chrome # 546991 , hiện đã được sửa). Các RFC liên quan nói rằng khách hàng có thể thử lại, không phải là nó NÊN hoặc phải. Không thử lại không đặc biệt thân thiện với người dùng, nhưng có thể là mong muốn đối với công cụ gỡ lỗi hoặc thư viện HTTP.

Sự kiện số 6 nằm ngoài tầm kiểm soát của bạn, nhưng tùy thuộc vào phần mềm của máy chủ, số 5 có thể khắc phục được. Tham khảo tài liệu HTTP / 2 của máy chủ của bạn để biết thêm thông tin về cách thức và thời điểm nó gửi HTTP 421. Ngoài ra, bạn có thể cấp chứng chỉ riêng cho từng tên miền, nhưng điều đó tạo ra nhiều chi phí quản trị hơn và có thể không có giá trị. Bạn cũng có thể tắt hoàn toàn HTTP / 2, nhưng điều đó có thể quá mức trong hầu hết các trường hợp.


Tôi có chứng chỉ đa miền Comodo positiveSSL - thực sự là một chứng chỉ SSL duy nhất. Đi đến các chứng chỉ riêng biệt là một nỗ lực và / hoặc chi phí đáng kể tại thời điểm này. Các vấn đề chính đã xảy ra với việc cố gắng có các miền vô dụng tĩnh để phục vụ hình ảnh của tôi. Nó không xứng đáng với số lượng 421 giây tôi nhận được. Hiện tại, tôi đã vô hiệu hóa các miền tĩnh. Tôi vẫn có một số chia sẻ tài nguyên giữa các tên miền, nhưng số lượng 421 đã giảm đáng kể. Hiện tại không có giá trị hiệu quả được cho là. Một ngày nào đó, tôi sẽ kiểm tra đề xuất của bạn khi tôi có nhiều thời gian hơn.
mseifert

Cảm ơn bạn đã giải thích chi tiết. Mặc dù đây là một vấn đề khá khó chịu (và bạn chỉ chú ý đến nó khi sử dụng Safari), tôi thấy chuỗi sự kiện dẫn đến vấn đề này khá thú vị :)
fritzmg

1

Có lẽ điều này sẽ hữu ích cho một ai đó.

Tôi đã gặp lỗi này khi tôi cố gắng thay đổi cấu hình máy chủ ảo apache của mình thành HTTPS nhưng chỉ thay đổi cổng từ 80 thành 443 và quên thêm

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

Cấu hình gây ra lỗi 421:

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

Cấu hình đúng:

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

-1

Tôi gặp vấn đề tương tự. Chuyển sang hai SSL một khe đã thực hiện thủ thuật.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.