Разница между подписью сообщения XML с использованием DSIG: подпись и клиентский сертификат TLS

StackOverflow https://stackoverflow.com/questions/4153568

Вопрос

Я понимаю, что этот вопрос может быть немного расплывчатым или я могу использовать неправильную терминологию, то есть потому, что я пытаюсь справиться с этим :).

У меня есть требование для реализации цифровой подписания сообщения XML с помощью раздела DSIG: Signature. Я думаю, что понимаю этот процесс; Я буду использовать закрытый ключ, чтобы подписать его, что гарантирует получателю, что это был я, который отправил сообщение а также что никто не подделал это.

Я прав, что это отличается от реализации клиентских сертификатов TLS, но цель такая же? (Потому что TLS является уровнем транспорта, верно?) Было бы проще реализовать бы клиентские сертификаты? Это лучше, чем другой?

Большое спасибо за Ваш ответ,

Martijn

Обновление 1:

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

Это было полезно?

Решение

Вы сравниваете безопасность уровня сообщений с безопасностью на уровне транспорта. Хотя у них есть сходство, у них разные цели.

Использование TLS защищает связь от видимого и измененного промежуточными сторонами. Сертификат X.509 на стороне сервера гарантирует, что сообщения, отправленные на него, могут быть прочитаны только сервером с помощью этого закрытого ключа, и что он отправляет с сервера с помощью этого закрытого ключа. Это могло, это может свободно рассматриваться как подпись на сервере и зашифрование для сервера с сертификатом X.509, хотя он действительно применяется только к сообщениям рукопожатия TLS, а не данные приложения, которые обмениваются потом. (Я оставляю тот факт, что вы получаете симметричное шифрование канала в любом случае, независимо от того, представлял ли любая сторона сертификата; важно иметь, по крайней мере, сервер использовать сертификат, чтобы клиент знал, что он общается вместо общение с потенциальным человеком в середине). Когда вы добавляете клиентский сертификат к этому, клиент также подписывает сообщения TLS, которые он обменялся во время рукопожатия.

Когда вы используете как клиентские и серверные сертификаты, вы можете (тщательно) нарисовать аналогию с помощью уровня безопасности, в том, что сообщения, подписанные и зашифрованные, являются сообщениями рукопожатия TLS, которые используются для установки канала TLS.

Тем не менее, существуют большие различия с безопасностью уровня сообщения (например, XML-DSIG и XML-ENC).

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

Во-вторых, с точки зрения реализации XML-DSIG имеет тенденцию выполняться на уровне приложения, тогда как TLS имеет тенденцию выполняться разъемом сервера. Разница может быть размыто в зависимости от условий развертывания, но TLS относится к общению с машиной / контейнером, а не приложением позади них. Как правило, сертификат TLS будет настроен на контейнере Java или на уровне WCF, в то время как сертификат, используемый для XML-DSIG, будет использоваться WebApp / приложение, запущенное позади. Там могут быть разные люди или процедуры, отвечающие там.

(Вы также правы, если вы используете XML-DSIG без XML-ENC, вы не шифруете данные.)

Другие советы

Пока что вы сравниваете яблоки в апельсины.

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

TLS означает безопасность транспортного слоя и используется для шифрование (не подписать) данные во время передачи. Это не имеет ничего общего с XML конкретно. TLS также использует сертификаты X.509, но вы не можете использовать тот же сертификат для XMLSDIG и TLS, причина, если сертификаты должны иметь определенные цели (ключевое использование поля).

Я предлагаю вам сделать какую-нибудь книгу на PKI (я всегда рекомендую Официальное руководство по криптографии RSA Security Ибо это простота) и внимательно прочитайте.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top