Я разрабатываю клиент-серверное приложение, которое будет общаться через отдых. Некоторые пользовательские данные запроса будут храниться в заголовке запроса. И сервер, отправляющий запрос, и принимающий сервер, имеют сертификат SSL - будут ли зашифрованы заголовки или только контент?





SSL шифрует весь путь связи от клиента к серверу и обратно, так что да - заголовки будут зашифрованы.
Кстати, если вы разрабатываете сетевые приложения и заботитесь о безопасности данных, по крайней мере, вам следует прочитать книгу Нильса Фергюсона и Брюса Шнайера «Практическая криптография». идея. Если я могу сделать наблюдение - и, пожалуйста, я не имею в виду это как личную критику - ваш вопрос указывает на фундаментальное непонимание самых элементарных технологий веб-безопасности, и это никогда не является хорошим знаком.
Кроме того, никогда не бывает плохой идеей подтвердить, что данные, которые предполагается зашифрованными, действительно зашифрованы. Вы можете использовать сетевой анализатор, чтобы отслеживать трафик в сети и следить за тем, чтобы в открытом виде не передавались какие-либо важные данные. Раньше я использовал Wireshark для этого - иногда результаты могут быть удивительными.
«SSL шифрует весь путь связи» ... кроме заголовков IP и TCP.
И заголовки, и контент зашифрованы.
SSL ... или, скорее, HTTPS (HTTP через SSL) отправляет весь HTTP-контент через SSL, и поскольку HTTP-контент и заголовки на самом деле одно и то же, это означает, что заголовки также зашифрованы. Поскольку данные GET и POST отправляются через заголовки HTTP, тогда это имеет смысл только тогда, когда при безопасной отправке данных вам не нужно просто шифровать код ответа или контент.
Содержимое и заголовки HTTP - это не одно и то же, и данные POST не отправляются через заголовки HTTP, а отправляются в теле запроса.
Информация, предоставленная Уэсли, неверна. POST помещает данные в тело сообщения.
Пока вы общаетесь в туннеле SSL, все, что отправляется между сервером и клиентом, будет зашифровано. Шифрование выполняется перед отправкой или получением каких-либо данных.
Одного сертификата недостаточно, вам необходимо настроить веб-сервер для шифрования соединений (то есть для использования сертификата) для этого домена или виртуального хоста. Кроме того, я думаю, вам понадобится всего лишь один сертификат, ответы на запросы все равно будут зашифрованы.
И да, заголовки HTTP зашифрованы так же, как и данные.
Вы, кажется, думаете, что REST - это отдельный протокол.
REST - это не протокол. Это стиль дизайна для приложений на основе HTTP.
Итак, вы пишете HTTP-приложение. Заголовки зашифрованы? Да, если вы используете протокол HTTPS (HTTP через SSL) вместо обычного HTTP.
Наличие сертификатов с обеих сторон не имеет прямого отношения к вашему вопросу. SSL-сертификаты используются для аутентификации. Они помогают обнаруживать атаки типа «злоумышленник посередине», такие как отравление кеша DNS.
Спасибо, но я знаю, что REST - это методология, а не протокол.
Другие ответы верны: заголовки действительно зашифрованы вместе с телом при использовании SSL. Но имейте в виду, что URL-адрес, который может включать параметры запроса, зашифрован никогда. Поэтому будьте осторожны, никогда не помещайте конфиденциальную информацию в параметры запроса URL.
Обновлять:, как @blowdart указал ниже, это неправильно. См. Комментарий ниже.
Нет, не совсем так. Параметры запроса отправляются после рукопожатия и, таким образом, шифруются; SSL специально удаляет их и отправляет как часть блока страницы.
@blowdart - очень верно, но браузеры по-прежнему сохраняют строки запроса в своей истории. Так что лучше не использовать конфиденциальную информацию в строке запроса.
С тех пор я подтвердил, что @blowdart верен; мой ответ был неправильным.
@Avi: Я думаю, вам следует отредактировать свой ответ, чтобы он отражал ваши «новейшие знания», т.е. что вы ошибались, вместо того, чтобы комментировать его. Всего мои 2 цента :)
Не все зашифрован: строка запроса запроса не зашифрована. Поверьте, я видел такие запросы:
https://mydomain.com/authenticate?user=username&password=MyStrongPasswordSentInTheClear
Пожалуйста, не указывайте конфиденциальные данные в качестве параметров в строке запроса.
Даже запрос защищен SSL / TLS между вашим браузером и сервером.
Не правда. Все, что происходит после mydomain.com, отправляется по проводу внутри запроса HTTP GET/POST/etc. и, следовательно, это зашифровано. Однако сама строка URL-адреса обычно просачивается по параллельным логическим путям, например в истории браузера, журналах, сохраненных ссылках, избранном, панелях инструментов, журналах сервера; и, наверное, что самое худшее - в некоторых веб-аналитических справочниках. Поскольку исходный вопрос касается REST, многие из них не имеют отношения к делу. Как бы то ни было, мое личное практическое правило: «не помещайте конфиденциальные данные (пароли, PII, идентификаторы БД) в URL-адреса».
Спасибо, это очень ценно. Я был уверен в ответе, но должен был подтвердить это (для сильных мира сего), прежде чем мы начнем разработку. Ваше здоровье!