HTTP 2 下使用相同證書子域名 SSL配置不一致導致 421 錯誤
BS-CS | 航空&軌道&公路交通愛好者 | 程序猿
這個情況真的很罕見,網上資料很少,這邊記錄一下,方便以後遇到的人解決。
背景:
有如下子域名:http://abc.test.gov、http://def.test.gov,兩個域名都啓用了HTTP2,使用同一個通配符證書*.http://test.gov,綁定在同一個服務器上。
http://abc.test.gov有一個鏈接指向http://def.test.gov,用戶點擊該連接報錯:(iOS Safari、Android Webview會,Chrome Mac版正常)
HTTP/2 421 Misdirected Request
The client needs a new connection for this request as the requested host name does not match the Server Name Indication (SNI) in use for this connection.
解決辦法:關閉apache裏的http2
原因查證如下:
- 由於啓用HTTP2,瀏覽器默認在同證書、同IP的情況下會採取連接複用。
- 兩邊域名的SSL配置不同,其中http://def.test.gov(配置了雙向認證 SSLVerify require)。這導致服務器拒絕瀏覽器的多路複用請求,報421。這種情況也會發生在根證書不一致等情況
- 這種情況在HTTP1.1下不會發生