
我的這個網站直到最近都運作良好。現在,用戶報告說,它無法在他們的 iPhone 和 iPad 上開啟。
無論您在 iOS 上嘗試什麼瀏覽器,都不會起作用。在 Mac 電腦上瀏覽時,它也不會在 Safari 中開啟。但其他瀏覽器正常運作(僅限 Mac OSX,不適用於 iOS)。
這是伺服器配置:
DigitalOcean + Ubuntu 18.04 + Nginx + PHP 7.3 (Laravel) + Let's Encrypt SSL + HTTP2 已激活
在進一步解釋之前,我想提一下,使用與上面相同類型的配置,我有另一台運行良好並且可以從所有設備訪問的伺服器。除了網域名稱和 IP 位址之外,它們幾乎相同(在配置和設定方面)。
我認為值得一提的另一個微小的額外資訊是我的用戶位於伊朗。
這是我檢查過的事情的清單:
- 可使用 iOS 和 Mac 上的 ping 指令存取該網域。
- IP位址本身也是可以存取的,可以用來瀏覽網站,它只會顯示「無效的ssl憑證」警告。
- 用於網域的 DNS 均可從 iOS 和 Mac 執行 ping 操作。
- 如果使用 VPN 連接,則可以存取該網站。這真的很奇怪,因為從技術上講,一切都是可訪問的,包括網域、IP 和 DNS。
- 除了使用 VPN 之外,如果完全關閉/停用 SSL,也可以存取網站。
- 使用 Let's Encrypt SSL 的其他公共網站都可以存取。所以這不可能是 Let's Encrypt 的問題。
這是我到目前為止所嘗試過的:
- 大量的谷歌搜尋。我甚至遇到過一個有相同類型問題的用戶這裡和這裡和這裡
- 我嘗試過禁用 HTTP2。
- 我已經仔細檢查了我的防火牆設置,甚至嘗試停用它。
- 我試過禁用 GZIP。
- 我在 ssllabs.com 上進行了 ssl 測試,它顯示沒有問題,並且與我的工作伺服器相同。
- 嘗試
keepalive_disable "safari"
在 nginx 設定中使用 - 我嘗試過交換
ssl_protocols
值,例如僅接受 TLSv1.3 或刪除 TLSv1.0 - 嘗試使用
ssl_session_cache
- 嘗試更改
ssl_ecdh_curve
為auto
和secp384r1
- 嘗試更改
ssl_ciphers
為HIGH:!aNULL:!MD5;
和EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
- 嘗試更改
ssl_session_tickets
為on
和off
- 嘗試使用
Strict-Transport-Security
/etc/letsencrypt/options-ssl-nginx.conf
嘗試了certbot 使用的評論- 嘗試了不同的 HTTP 到 HTTPS 重定向設置
- 我確保在測試時使用私有選項卡,以確保我不會看到某種錯誤的快取嘗試訪問該網站。
- 每次更改設定檔時,我都會重新載入並重新啟動 nginx 服務。
- 我做了很多工作
sudo reboots
以確保這不是一個簡單的重啟問題。
作為最後的手段,我甚至費盡了從頭開始重新安裝作業系統並重新設定伺服器的麻煩。仍然不起作用。不,我沒有複製我的配置文件,我手動執行了每個命令並仔細修改了配置文件,以確保我不會從以前的設定中帶來任何問題。這也意味著我從 Let's Encrypt (使用 cerbot)發出了新的 SSL 請求。雖然我不知道他們是否會產生新的或發送給您上次的。
編輯1: 我想在這裡拋出一個隨意的想法。我真的不知道高級網絡,但也許伊朗審查防火牆的某些東西正在幹擾 SSL 連接,導致 Apple 設備無法建立連接。我聽說 Apple 有自己的嚴格要求,與 Chrome 和 Firefox 不同,它需要特定的 SSL 連線。這兩個可能會忽略一個輕微的錯誤,但蘋果設備不會。
編輯2:我在 Wireshark 敲擊時檢查了 Safari。無論我做什麼,似乎都只交換很少的資料包。而且 Safari 似乎正在使用 TLSv1.0,即使我在 nginx 設定中停用了它。我真的不知道如何完全關閉它,這樣 Safari 就不會嘗試使用它與伺服器進行通訊。
編輯3:我嘗試使用不同的 SSL(使用 comodo 的 3 個月免費 ssl 試用計劃),但問題仍然存在...我讀到一些人說他們在更改 SSL 後解決了一些類似的問題。我不知道為什麼它對我不起作用。
編輯4: 我決定更改網域的 DNS 伺服器,看看是否是 DNS 問題。我不知道為什麼以及如何,但在我更改它們之後,Safari 可以短暫加載網站。但過了一段時間,它又停止運作了。
編輯5:在我的網站中停用外部腳本程式碼並不幸運,例如Google分析(因為他們的服務對伊朗人來說有點被阻止)。我再次閱讀人們的報告,暗示有些人透過停用外部腳本解決了他們的問題。
編輯6:我開始相信這不是我的網路或伺服器配置問題。看起來確實像是第三方乾擾了請求。我不了解蘋果以及它如何處理網絡,但我認為蘋果公司的連接/數據包談判正在引發某種危險信號,這使得伊朗審查制度/防火牆放棄客戶端連接。
編輯7:我甚至更改了伺服器的資料中心,使用了全新的 IP 位址。問題仍然存在:(
編輯8:這是/var/log/nginx/error.log
設定為 時的輸出debug
。當我從 Safari 用戶端發起請求時,它會顯示這些行。
我確實嘗試禁用 php fpm 以確保它不是 php 瓶頸問題。我還嘗試調整一些隨機參數,例如碰撞net.core.somaxconn
或1024
增加backlog
php fpm 設定檔。此外,當我使用 everythink 觀察系統時,它htop
看起來很正常,沒有 CPU 使用率峰值,也沒有特定進程跳到清單頂部。
編輯9:我將 Nginx 更換為 Apache2 以檢查是否是網頁伺服器問題。嗯,事實並非如此。
答案1
既然你懷疑你和網站之間的代理,你能透過使用 ssh 中的 -L 選項來繞過它嗎?它將在您和您的網站之間提供一條安全隧道,代理無法更改該隧道。
例如,在桌面上執行以下命令: ssh -L 2222:127.0.0.1:443[電子郵件受保護]
此命令登入您的伺服器後,在同一桌面上啟動瀏覽器以https://127.0.0.1:2222
如果您現在看到您的網站及其 SSL 證書,則一切都已正確設定 - 當您不使用隧道時,中間有人會變更您的 SSL 連線。
答案2
我成立暫時解決我的問題。我剛剛將伺服器移至不同的託管/資料中心!
更新:實際上幾個月後問題再次出現......我真的不知道是什麼技術問題導致了問題或如何解決它。
更新2:我與一位IT 網路專家交談,他們告訴我,這個問題實際上依賴於政府防火牆規則對我的網域進行檢測(虛假/錯誤的審查),而且無論我使用什麼網頁伺服器配置或網站託管,它都會被阻止通過我無法觸及的防火牆。
答案3
它可能只是證書,您是否正確設定了SubjectAlternativeName?不建議僅使用主題名稱作為 DNS 名稱。您是否使用憑證固定、OSCP 裝訂、HSTP 和其他相對較新的 TLS 設定?這可能會導致受監管網路出現問題。
有些網路使用者需要使用具有 SSL 檢查功能的代理程式。許多企業環境使用類似 IronPort 或 Bluecoat 的產品來偵測隱藏通道和惡意軟體,作為其安全策略的一部分。這樣做的方法源自於地下雜誌Phrack 76 中的一篇文章。連接每個客戶,由麻省理工學院“打開 SSL”,伊朗和中國等國家都在監控整個互聯網。因此,沒有 PFS,並且根據客戶端檢查伺服器加密的情況,某些事情可能會失敗,因為它被更改或 ssl 甚至被完全刪除。如果您不關心它,那麼您可以透過刪除提到的選項將伺服器憑證設定降級為「匯出品質」。
答案4
@austin-dixon 的答案是正確的。該測試必須在用戶所在的同一國家/地區進行,如果您尚未在該國家/地區,這可能不是一個選項。
您至少可以使用 Qualys SSL 測試來驗證設定:https://www.ssllabs.com/ssltest/。在這種情況下,字母分數並不重要,只需向下捲動到“握手模擬”,看看 Apple 裝置在正常情況下的預期表現如何。
不管怎樣,這都證實了你已經懷疑的事情,即這些用戶和網站之間存在某種東西。除了完全停用 HTTPS 之外,開發人員沒有太多方法可以解決這種情況。中間人可能需要一些比伺服器配置更弱的密碼套件或更低的 TLS 版本,但我不知道在這種情況下應該建議哪些。