Этот вопрос является дубликатом Подписать тело SOAP и метку времени с сертификатом X509 в WCF
Я сталкиваюсь с проблемой, когда хочу создать вызов WCF с подписанным XML.Целью является вызов SOAP WCF, который содержит заголовок Security, с SignedInfo для метки времени (также в заголовке безопасности) и для тела.
Я пробовал множество вещей: * Использованиепользовательская привязка * Использование существующих привязок в .NET (которые никогда не дают правильного конверта SOAP) * Использование класса SignedXml, который имеет трудности с префиксом ds:, поэтому его также следует переопределить * Копирование кода .NET онлайн для отладкигде что-то идет не так (но это слишком сложно)
Есть много сайтов, которые могут проверить подписанный XML, но они всегда говорят мне, что моя подпись неверна.
Код, который я используюдля генерации DigestValue (txtOutput.Text - это фактический XML-код, который я вставляю)
SHA1 sha = new SHA1Managed();
Transform transform = GetTransformation();
transform.LoadInput(new MemoryStream(Encoding.UTF8.GetBytes(txtOutput.Text)));
var hash = transform.GetDigestedOutput(sha);
txtDigest.Text = Convert.ToBase64String(hash);
Важное примечание: с помощью SOAP UI я могу получить правильный запрос HTTPS (который проверяется «другой стороной»)), но когда я пытаюсь восстановить DigestValue этого XML-метки времени, я получаю результат, отличный от результата пользовательского интерфейса SOAP.