Ошибка междоменного SSL-рукопожатия в Firefox с использованием xhr, клиент-сертификат - PullRequest
5 голосов
/ 24 ноября 2010

Настройка выглядит следующим образом:

  • Firefox (3.x и 4b) с правильно настроенными и работающими сертификатами, включая сертификат клиента.
  • Веб-страница сТип XMLHttpRequest () вызова AJAX для другого субдомена .
  • Пользовательский веб-сервер в указанном субдомене принимает запросы, отвечает с разрешающим заголовком Access-Control-Allow-Origin и , требующим проверки клиента .

Проблема в том, что Firefox прерывает запрос (ну, в любом случае, это то, что он говорит в firebug) внезапно.Запуск установки с openssl s_server вместо этого намекает на то, что Firefox на самом деле даже не отправляет сертификат клиента:

140727260153512:error:140890C7:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:peer
did not return a certificate:s3_srvr.c:2965:ACCEPT

Та же самая точная настройка прекрасно работает с Chrome, предполагая, возможно, ошибку в Firefox. Однако выполнение вызова ajax с элементом <script>, введенным в DOM, кажется, работает как задумано ...

Итак, кто-нибудь еще сталкивался с этим?Это ошибка?Есть обходные пути?Чего-то очевидного не хватает?

Ответы [ 2 ]

4 голосов
/ 04 декабря 2015

Перезвон через 5 лет, вероятно, не сильно поможет ОП, но в случае, если у кого-то еще будет эта проблема в будущем ...

Firefox, по-видимому, не отправляет сертификат клиента с XHR-запросом из разных источников по умолчанию. Установка withCredentials=true в экземпляре XHR решила проблему для меня. Обратите внимание, что я также не видел эту проблему с Chrome - только Firefox.

Для получения дополнительной информации см. это сообщение в блоге Mozilla Dev Network . В частности, следующее утверждение:

По умолчанию в межсайтовых вызовах XMLHttpRequest браузеры не отправлять учетные данные. При вызове объекта XMLHttpRequest необходимо установить определенный флаг.

2 голосов
/ 24 ноября 2010

Причина, по которой внедрение сценария работает, а не простой запрос XHR, заключается в Политика единого источника .Это, вероятно, объясняет, почему Chrome разрешает XHR, но не FF;Chrome считает субдомен частью того же происхождения, но FF этого не делает.

Разрешено внедрение скриптов из других доменов (что и делает Google Analytics), и одна из методик, позволяющих справиться с этой ситуацией.

Моя команда справляется с этой ситуацией, отправляя запрос через прокси на стороне сервера.

Я бы порекомендовал использовать прокси на стороне сервера, если вы можете, но метод внедрения скрипта работает нормально до тех пор, покакод исходит из надежного источника.

Я также нашел эту статью , которая описывает вашу ситуацию.

...