2010-12-30 4 views
20

自己署名証明書を使用する安全なサーバーにAJAX呼び出しを行いたい。私のアプリが使用されている環境では、これは問題ありません - 私はCA証明書をユーザーに提供し、アプリケーションを使用する前にインストールしてもらうことができます。ただし、ユーザーが証明書をインストールする前にアプリを訪問しようとすることがあります。このような場合は、少なくともFirefox(問題の最も一般的なケース)では、アプリケーションが黙って失敗するため、エラーハンドラを起動せずに呼び出しが黙って死にかけているように見えます。 FWIWでは、ユーザーがサーバ上の実際のページを訪問すると、証明書の警告が表示されます。信頼できない(自己署名された)HTTPSへのAJAX呼び出しは暗黙的に失敗する

ハートビート/ pingリクエストを作成し、サーバーが時間内に応答するかどうかを確認するためのウォッチドッグタイマーを設定するなど、回避策をハックする可能性があります。私は前もって接続をテストできることを望んでいます。あなたが話したいサーバーがJavascriptの中から信頼できる証明書を持っていることを確認する "正しい"方法は何ですか?何か違いがあれば、JQuery経由でAJAXリクエストを行っています。

更新:ここに素晴らしいパンチラインがあります。それは、AJAXはまったく問題ではないということです。私は、それが自己署名証明書に関連していたという症状に基づいていると確信していましたが、AJAXエラーの不具合は憂慮していました。以下の答えにリンクされている仕様を考えてください。別のチームメンバーがそれを打ち明けた:JQueryが決してロードされなかったので、AJAXエラーハンドラは起動しなかった!私たちは、私たちのサイトの別のサブドメインからJQueryを、HTTPSでもホストしていました。ユーザーはourService.example.comでは例外を追加しましたが、js.example.comでは例外を追加しました。明らかに、信頼できないセキュリティ保護された接続で<script>タグを指している場合、も黙って失敗します。

{/ headdesk}

+0

あなたのネットワーク接続が離れたときなど、あなたが見ている動作とまったく同じサーバーに接続できないという違いはありますか? – martona

答えて

14

のXMLHttpRequests(AJAXリクエスト)は、同じオリジンサーバ上許されます。これは、ターゲットURLのscheme:// host:portの部分が現在のドキュメントのものと一致しなければならないことを意味します。仕様によれば、SSL以外のURLからSSL URLを要求することさえ許されてはいけません。

私が見るとそれほどハッキリしないソリューションは、すべてのユーザーをSSLサイトに強制的にリダイレクトすることだけです。そうすれば、AJAXリクエストを行う前に証明書の警告が表示されます。

注:この仕様では、TLSハンドシェイクの失敗(このケースは、ある意味では下にあると仮定します)の場合、NETWORK_ERR(コード19)の例外がスローされるはずです。 AJAXリクエストを開始するときに例外をキャッチしようとする可能性があります。詳細については、エラー処理についてthe specを参照してください。

+2

あなたは最初の段落で正しく、2番目の段落ではありませんでした。 ブラウザからHTTPHTTPSへのXMLHTTPRequestを自由にすることはできません。一部のブラウザ(Firefoxなど)には、オプトイン許可メカニズム(Access-Control-Allow-Originヘッダーなど)があります。 IEにはそのようなメカニズムはありません。 – EricLaw

+0

確認していただきありがとうございます、私はそれを編集しました。 – Seldaek

関連する問題