如果使用者使用http上的443埠訪問網站,如何關閉連接?
如果使用者訪問http://example.com:443之類的網站,我如何給使用者一個連接重置錯誤,而不是給出以下錯誤:
錯誤的請求
您的瀏覽器發送了此伺服器無法理解的請求。
原因:您對啟用 SSL 的伺服器埠使用純 HTTP。
請改用 HTTPS 方案訪問此 URL。
上面的錯誤是 Apache 提供給我不想要的使用者的。相反,我只想停止連接,而不是給出文本響應。這可能嗎,應該是,因為很多網站都有這個功能。提前致謝。(此外,我自己無法嘗試任何事情,因為我不知道它是如何工作的,所以如果可以的話,我可以自己實現它)。
在某種程度上類似,但無論如何都不能回答我的問題: Serving port 443 over http 創建 400 Bad Request Error 而不是 redirect,但提到:“如果您嘗試與其他伺服器進行此類請求,那麼他們將關閉連接而不會出現任何錯誤完全掛起,或者只是掛起,因為他們仍然希望從客戶端獲得 TLS 握手” ,所以我的問題是如果使用者訪問http://example.com:443如何關閉連接。
以防萬一:
請注意,當使用者訪問 http:// 而不是 https:// 上的埠 443 時,我想關閉連接。我不希望 apache 顯示錯誤請求消息。我想關閉連接,因為有人提到無法將 http:// 上的 443 重定向到 https://。如果有任何方法可以做到這一點,請告訴我(除了 HSTS,我不願意信任)。我認為這將使用防火牆來完成(不確定)。我也見過 cPanel 這樣做,但我沒有將 cPanel 用於其他目的,所以請不要要求我這樣做。
還:
除非您修改 Apache 的原始碼,否則無法更改 400 bad request 頁面,因此無法從 http 重定向到 https。我不認為我被允許修改 Apache 的原始碼。
我還看到執行
curl http://www.google.com:443
說curl: (52) Empty reply from server
,所以發送一個空回复應該足以停止連接對吧?我不確定。但也許是的,如果是這樣,怎麼辦?(如果有不同的連接斷開方法,請不要回答這個問題)。需要明確的是:我要求的是
sudo ufw deny out 443 http
(可能無效)之類的東西。
我在 Apache 原始碼目錄中編輯了一個文件
./modules/ssl/ssl_engine_kernel.so
。在該文件中,您可以找到一行內容:
if (sslconn->non_ssl_request == NON_SSL_SET_ERROR_MSG) { apr_table_setn(r->notes, "error-notes", "Reason: You're speaking plain HTTP to an SSL-enabled " "server port.<br />\n Instead use the HTTPS scheme to " "access this URL, please.<br />\n"); /* Now that we have caught this error, forget it. we are done * with using SSL on this request. */ sslconn->non_ssl_request = NON_SSL_OK; return HTTP_BAD_REQUEST; }
請改用 HTTPS 方案訪問此 URL,請…..`。
將其更改為:
if (sslconn->non_ssl_request == NON_SSL_SET_ERROR_MSG) { /* apr_table_setn(r->notes, "error-notes", "Reason: You're speaking plain HTTP to an SSL-enabled " "server port.<br />\n Instead use the HTTPS scheme to " "access this URL, please.<br />\n"); */ /* Now that we have caught this error, forget it. we are done * with using SSL on this request. */ sslconn->non_ssl_request = NON_SSL_OK; return apr_pstrcat(NULL); }
然後,重新編譯 Apache。你應該很好:)
有趣的。像這樣的東西怎麼樣:
<VirtualHost *:443> <Location /> Order deny,allow Deny from all Allow from 127.0.0.1 </Location>
這將拒絕除 localhost 之外的任何埠 443 的流量。
但實際上我認為您可能想要做的(?)只是將所有 http 請求重定向到 https。重定向後 443 將是多餘的。