最近まで問題なく動作していたこのウェブサイトを持っています。今、ユーザーはそれが彼らのiPhoneとiPadで開かないことを報告しています。
IOSでどのブラウザーを試してもかまいませんが、機能しません。また、Macマシンで閲覧しても、Safariで開かない。ただし、他のブラウザは正常に動作します(iOSではなくMac OSXのみ)。
サーバー構成は次のとおりです。
DigitalOcean + Ubuntu 18.04 + Nginx + PHP 7.3(Laravel)+ Let's Encrypt SSL + HTTP2を有効化
さらに説明する前に、上記と同じタイプの構成を使用して、正常に動作し、すべてのデバイスからアクセスできる別のサーバーがあることを述べておきます。それらは、ドメイン名とIPアドレスを除いて、(構成とセットアップに関して)ほぼ同じです。
私が言及する価値があると思うもう1つの小さな追加情報は、ユーザーがイランにいるということです。
これが私がチェックしたもののリストです:
これが私がこれまでに試したことです:
keepalive_disable "safari"
を使用してみました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
を試しましたSudo reboots
をたくさん行いました。最後の手段として、私はOSを最初から再インストールし、サーバーを再セットアップするという問題も経験しました。それでも動作しません。いいえ、構成ファイルをコピーしなかったので、すべてのコマンドを手動で実行し、構成ファイルを慎重に変更して、以前のセットアップで問題が発生しないようにしました。これはまた、Let's Encrypt(cerbotを使用)から新しいSSLリクエストを実行したことを意味します。新しいものを生成するのか、前回のものをあなたに送るのかはわかりませんが。
EDIT 1:ここでランダムな考えを投げたいです。高度なネットワーキングについては本当に知りませんが、イランの検閲ファイアウォールの何かがSSL接続に干渉しているため、Appleデバイスが接続の確立に失敗します。Appleは独自の方法で厳密であり、chromeおよびfirefoxとは異なり、特定のSSL接続が必要です。これら2つはわずかなエラーを無視する可能性がありますが、Appleデバイスはない.
EDIT 2:Wiresharkがタップしている間にSafariをチェックしました。私が何をしても、交換されるパケットはほとんどないようです。また、nginx configで無効にしたにもかかわらず、SafariがTLSv1.0を使用しているようです。完全にオフにする方法がわからないので、Safariはそれを使用してサーバーと通信しようとさえしません。
EDIT 3:別のSSL(comodoの3か月の無料のssl試用プログラムを使用)を試してみましたが、問題はまだあります...彼らはSSLを変更した後、いくつかの同様の問題を解決したと述べました。なぜうまくいかないのか分かりません。
EDIT 4:ドメインのDNSサーバーを変更して、DNSの問題かどうかを確認することにしました。理由と方法はわかりませんが、変更した後、Safariがサイトを短時間で読み込むことができました。しかし、しばらくすると再び機能しなくなりました。
EDIT 5:Googleアナリティクスなど、私のサイトで外部スクリプトコードを無効にすることはできません(サービスがイランではブロックされているためです)。繰り返しになりますが、外部スクリプトを無効にすることで問題が修正されたことを示唆する人々の報告を読みました。
EDIT 6:これは私の側のネットワークまたはサーバー構成の問題ではないと信じ始めています。リクエストを妨害しているサードパーティのようです。 Appleとそれがネットワーキングを処理する方法についてはわかりませんが、Apple接続/パケット化のネゴシエーションは、いわばある種の赤旗を引き起こしています。これにより、イランの検閲/ファイアウォールはクライアント接続をドロップします。
EDIT 7:新しいIPアドレスでサーバーのデータセンターを変更しました。問題はまだ存在します:(
EDIT 8:debug
に設定した場合の/var/log/nginx/error.log
出力です。 Safariクライアントからリクエストを開始すると、これらの行が表示されます。
Php fpmを無効にして、phpのボトルネックの問題ではないことを確認しました。また、php fpm設定ファイルでnet.core.somaxconn
を1024
にバンピングしたり、backlog
を増やしたりするなど、いくつかのランダムなパラメーターを微調整しようとしました。また、htop
を使用してシステムを監視すると、everythinkは正常に見え、CPU使用率が急上昇することも、特定のプロセスがリストの先頭にジャンプすることもありません。
EDIT 9:NginxをApache2にスワップして、ウェブサーバーの問題かどうかを確認しました。まあ、そうではなかった。
あなたとウェブサイトの間のプロキシを疑っているので、sshで-Lオプションを使用してプロキシをバイパスできますか?それはあなたとあなたのウェブサイトの間にプロキシーによって変更できない安全なトンネルを提供します。
たとえば、これをデスクトップで実行します。ssh -L 2222:127.0.0.1:443 [email protected]
このコマンドがサーバーにログインしたら、同じデスクトップでブラウザを起動して https://127.0.0.1:2222
サイトとそのSSL証明書が表示されれば、すべてが正しく設定されています。トンネルを使用していないときに、途中で誰かがSSL接続を変更しているはずです。
私found私の問題の一時的な解決策。サーバーを別のホスティング/データセンターに移動しました!
更新:実際、問題は数か月後に再び現れました...問題の原因となっている技術的な問題やその修正方法は本当にわかりません。
それは単に証明書である可能性があります。SubjectAlternativeNameは適切に設定されていますか? DNS名にSubjectNameのみを使用することは非推奨です。証明書のピン留め、OSCPステープリング、HSTP、およびその他の比較的新しいTLS設定を使用していますか?規制されたネットワークで問題が発生する可能性があります。
一部のインターネットユーザーは、SSLインスペクションでプロキシを使用する必要があります。多くの企業環境では、IronPortまたはBluecoatと同様の製品を使用して、セキュリティポリシーの一部として秘密チャネルおよびマルウェアを検出しています。これを行う方法は、アンダーグラウンドマガジンPhrack 76の記事に由来します。つまり、各クライアントが信頼するプロキシの追加のCAルート証明書を持ち、プロキシが代わりに接続を再開始するという簡単なセットアップに終わります。 MITの「SSLを開く」各クライアント、イランや中国などの国はインターネット全体を監視しています。このため、PFSはなく、クライアントがサーバーの暗号をチェックするかどうかに依存するいくつかの問題が発生する可能性があります。これは、暗号が変更されているか、SSLが完全に削除されているためです。気にしない場合は、前述のオプションを削除して、サーバー証明書の設定を「エクスポート品質」にダウングレードできます。
@ austin-dixonの答えは正しい方向にあります。そのテストは、ユーザーがいる国と同じ国から行う必要があります。その国にまだいない場合、これは選択肢にならない場合があります。
https://www.ssllabs.com/ssltest/ にあるQualys SSLテストを使用することで、少なくとも構成を検証できる場合があります。この場合、文字のスコアは関係ありません。下にスクロールして[Handshake Simulation]までスクロールし、Appleデバイスが通常の状況でどのように動作することが期待されるかを確認します。
どちらの方法でも、既に疑わしいものを確認するだけで、それらのユーザーとサイトの間に何かがあることを確認できます。開発者がHTTPSを完全に無効にする以外に、この状況を回避する方法は多くありません。真ん中の人が、サーバーが構成されているよりも弱い暗号スイートまたは低いTLSバージョンのいくつかを必要とする可能性がありますが、その場合、どの暗号スイートを提案すべきかわかりません。