Вы сравниваете безопасность на уровне сообщений с безопасностью на транспортном уровне.Хотя они имеют сходство, у них разные цели.
Использование 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, будет использоваться запущенным позади приложением / приложением.Там могут быть разные люди или ответственная процедура.
(Вы также правы, что если вы используете XML-DSig без XML-Enc, вы не шифруете данные.)