2015-04-29 2 views
0

У меня есть приложение Java/Restlet, которое запускает два сервера. Один на указанном порту (отныне «сервер пользовательского интерфейса») и один на порте, случайно выбранном во время выполнения (далее «файловый сервер»), как на том же узле.Безопасный запрос AJAX на сервер со случайным портом

Предположим, что это приложение выполняется локально, а когда оно защищено, оно выполняется с самозаверяющим сертификатом. Файловый сервер имеет заголовки CORS, а сервер UI делает запросы HTTP Get к нему через jQuery AJAX.

Если приложение защищено SSL, я защищаю оба сервера с тем же хранилищем ключей и паролем. Однако на данный момент я больше не могу запускать запросы jQuery AJAX Get на файловый сервер с пользовательского интерфейса. Причина в том, что, хотя пользователь сказал своему браузеру сделать исключение для самоподписанного сертификата на сервере пользовательского интерфейса, они не имеют (и действительно не могут) сделать это для файлового сервера, так как он имеет случайную порт. Таким образом, запросы не переходят на файловый сервер.

В принципе, я понимаю, что современные браузеры помешают мне сделать запрос AJAX на сервер с недопустимым SSL-сертификатом, но я создаю оба сервера, и они используют один и тот же сертификат, и мне просто нужно убедить браузер, чтобы позволить мне сделать этот запрос

ответ

0

Так запросы не пройти к файловому серверу

Я думаю, что это делает, но ваш браузер не любит сертификат возвращается файл сервер. Поскольку вы утверждаете, что используете тот же сертификат как для интерфейса пользователя, так и для файлового сервера, и что ваш браузер принимает самозаверяющие сертификаты, наиболее вероятно, что проблема связана с общим именем (CN) возвращаемого сертификата. Если URL-адрес на файловом сервере отличается от CN сертификата, вашему браузеру это не понравится, но из-за того, что вы делаете «фоновый» вызов AJAX, вы можете не видеть ошибку, и она просто терпит неудачу.

+0

Хорошо, так что «не проходите» не было точной терминологии, которую я имел в виду. Во всяком случае, CN в сертификате моей тестовой среды фактически не имеет URL для своего CN вообще (это чье-то имя). Я не могу гарантировать, что мои клиенты будут иметь в своих сертификатах, мне нужно найти способ доверять запросу ajax независимо от действительности сертификата. – Nick

+0

Часть действительности сертификата имеет решающее значение для SSL-квитирования, поэтому полностью ее не обходимо. Что вы подразумеваете под сертификатами клиентов - я думал, что это все сертификаты сервера. Клиент - это браузер - правильно? таким образом, JQuery Ajax.Возможно, здесь перепутана терминология. Попробуйте это - загрузите настоящий URL-адрес сервера пользовательского интерфейса в свой браузер и настоящий URL-адрес Файлового сервера в ваш браузер - если они оба загрузятся, ваши JQuery-вызовы Ajax должны работать. – Vic

+0

Это веб-приложение в том смысле, что оно работает на сервере клиента, а интерфейс живет в веб-браузерах этих клиентов, но во многих случаях он используется полностью локально. В тех случаях, когда клиенты используют его во внутренней сети, некоторые из них используют самозаверяющий сертификат. Не существует «реального» UI-сервера или Файлового сервера, они порождаются этим приложением, работающим локально. И файловый сервер никогда не будет напрямую доступен пользователю, сервер UI должен тихо общаться с ним в фоновом режиме (через ajax). – Nick

0

Я думаю, что ваша проблема заключается в том, что браузер связывает доменное имя с сертификатом, когда вы выбираете его вручную.

Когда сертификат загружается с файлового сервера (localhost), так как он имеет другое доменное имя, чем имя удаленного сервера, браузер не распознает уже предоставленное ему доверие.

Возможные решения включают в себя:

  • Получить пользователю просматривать на файловом сервере первым и заставить их доверять сертификату. Возможно каждый раз, если браузер также связывает номер порта с доверием.
  • Купите сертификат для «localhost», подписанный доверенным ЦС.
  • Создайте свой собственный ЦС и используйте его для подписания сертификатов для удаленных и локальных серверов. Попросите пользователя добавить этот корневой ЦС в доверенное хранилище на своих компьютерах (однако вы можете много спрашивать, поскольку вы можете подписывать сертификат любого домена с этим корневым ЦС).
Смежные вопросы