Зачем использовать сертификат x.509 для шифрования XML? Почему бы просто не передать по https? - PullRequest
1 голос
/ 05 июня 2009

Не знаю много о шифровании ...

Допустим, я готовлю запрос SAML для отправки поставщику удостоверений. Зачем мне применять сертификат x.509 для этого запроса? Является ли передача по протоколу SSL недостаточно безопасной?

Ответы [ 5 ]

7 голосов
/ 14 января 2012

В случае SAML - безопасность на уровне сообщений (т. Е. Сам XML подписывается, а иногда и шифруется), потому что в обмене участвуют стороны, которые не общаются напрямую. SSL / TLS предназначен для обеспечения безопасности на транспортном уровне. Он используется только между двумя сторонами, осуществляющими непосредственную связь, и только на время этой связи.

В зависимости от того, какую привязку SAML вы используете, диалоговое окно может выглядеть следующим образом (например, по линиям Shibboleth ):

  • Браузер пользователя подключается к поставщику услуг (SP)
  • SP предоставляет пользователю запрос SAML, не обязательно видимый, но скрытый в форме или аналоге.
  • Браузер пользователя (при прямом подключении к IdP) отправляет запрос SAML в IdP.
  • Пользователь аутентифицируется с ним и получает ответ SAML.
  • Браузер пользователя отправляет этот ответ SAML на SP.

В этом сценарии не существует прямого соединения SSL / TLS между SP и IdP, хотя все 3 стороны участвуют. (Некоторые варианты включают внутреннюю связь между SP и IdP для атрибутов, но это другая проблема.)

  • Соединение SSL / TLS было бы недостаточно для IdP, чтобы узнать, что запрос SAML поступил от SP, для которого ему разрешено аутентифицировать и разблокировать атрибут, поскольку соединение с IdP происходит из браузера пользователя, а не из Сама ИП. По этой причине SP должен подписать запрос SAML сообщение , прежде чем передать его в браузер пользователя.
  • Соединение SSL / TLS было бы недостаточно для того, чтобы SP знал, что ответ SAML получен от IdP, которому он доверяет. Опять же, именно поэтому сам ответ SAML также подписан.

То, что относится к подписанию, также применимо к шифрованию, если промежуточная сторона, то есть пользователь, не должна видеть, что находится в сообщении SAML, и / или если соединение между пользователем и SP или IdP не закончено. SSL / TLS (обычно это должен быть протокол HTTPS).

6 голосов
/ 05 июня 2009

Да - SSL достаточно - но SSL только двухточечный. Вы не можете защитить свое соединение с помощью SSL, если между вашим источником и целевым компьютером есть несколько посредников.

В этом случае, например, при передаче через Интернет вы должны защищать реальное сообщение, а не транспортный уровень. Вот почему вам необходимо зашифровать XML (или хотя бы его часть).

Марк

4 голосов
/ 05 июня 2009

Все, что HTTPS сделает, - это зашифрует связь между двумя точками и предотвратит перехватчиков - он не подтвердит , кто был, кто отправил сообщение. Кроме того, он не обеспечит безопасную связь, если ваше сообщение будет переадресовано.

Если вы подпишете свой запрос сертификатом X.509, вы можете быть уверены, что расшифровщик имеет общий секрет, содержащийся в сертификате. Другими словами, вы можете быть уверены, что сообщение может быть расшифровано только той организацией, которой вы хотите его расшифровать.

В вашем случае требование шифрования X.509 означает, что вы должны быть уверены, что поставщик удостоверений является единственной организацией, которая получит ваш запрос.

Полезный учебник по Википедии здесь .

0 голосов
/ 11 июня 2009

На практике вы можете использовать HTTPS (SSL / TLS) для защиты вашего сообщения SAML. Но вы хотели бы использовать двустороннюю проверку / подтверждение SSL-сертификата, а это означает, что ваш клиент должен будет проверить сертификат X.509 сервера, а сервер должен быть настроен для выполнения аутентификации клиента, что потребует от него проверки X. 509 сертификат, который клиент представляет. Таким образом, клиент все равно будет нуждаться в собственном сертификате.

SSL / TLS на самом деле не предназначен для этого ... он был / предназначен для защиты веб-трафика от просмотра во время транспортировки и для того, чтобы клиент мог определить, с каким сервером он общается и отправляет конфиденциальную информацию (это было действительно разработано для электронной коммерции, где клиент (пользователь, покупающий что-то) знает, кому он отправляет информацию о своей кредитной карте). В случае SAML все дело в том, чтобы стороны знали, что информация, которой они обмениваются, не была изменена при транспортировке и что каждый говорит с тем, кем он себя считает. Использование сертификатов для подписи / шифрования этого сообщения само по себе делает это.

0 голосов
/ 05 июня 2009

Скорее всего, потому что они хотят аутентифицировать вас (клиента). HTTPS может использоваться для аутентификации клиента, но на практике это редко.

...