Задача уйти от ошибки в проверки подписи объекта SignedXml. Проблема в том, что после последних обновлений windows, они отключили поддержку алгоритма
http://www.w3.org/2000/09/xmldsig#rsa-sha1
Но проблема в том, что он является дефолтным для
X509Certificate2.PrivateKey
И этот
public AsymmetricAlgorithm PrivateKey { get; set; }
//
// Сводка:
// Получает объект System.Security.Cryptography.X509Certificates.X509Certificate2.PublicKey,
// связанный с сертификатом.
//
// Возвращает:
// Объект System.Security.Cryptography.X509Certificates.X509Certificate2.PublicKey.
//
// Исключения:
// System.Security.Cryptography.CryptographicException:
// Значение ключа не является значением RSA или DSA, или ключ не читается.
По дефолту имеет именно алгоритм rsa-sha1. И я не знаю как его подменить(Наследовать все классы из задачи включая SignedXml-кажется плохим решением)? Буду рад любой информации по вопросу! На сайте msdn мне ответили, что нужно изначально иметь сертификаты с другим алгоритмом Вопрос на MSDN. А вот на форуме КриптоПро, что алгоритм можно использовать другой.Вопрос на форуме КриптоПро.
Судя по документации MSDN, можно. Для этого надо:
X509AsymmetricSecurityKey.KeySize. Это свойство возвращает размер ключа сертификата (пары публичный/приватный ключ)DecryptKey. Этот метод вызывается WCF, чтобы расшифровать симметричный ключ с помощью приватного ключа сертификата.GetAsymmetricAlgorithm. Этот метод вызывается WCF и возвращает экземпляр класса AsymmetricAlgorithm, представляющего собой криптопровайдер для приватного или публичного ключа сертификата, в зависимости от переданного параметра.GetHashAlgorithmForSignature. Переопределите этот метод, если вам нужно использовать другую реализацию HashAlgorithm.GetSignatureFormatter. Этот метод возвращает экземпляр класса AsymmetricSignatureFormatter, связанный с приватным ключом экземпляра.IsSupportedAlgorithm. Этот метод используется для проверки поддержки криптографического алгоритма данной реализацией ключа.Также потребуется:
X509SecurityToken, использующего кастомный ключ.SecurityTokenProvider, возвращающего кастомный токен из п.1.ClientCredentialsSecurityTokenManager, если ключ нужен на стороне клиента.ServiceCredentialsSecurityTokenManager, если ключ нужен на стороне сервера.Подробнее в статье Изменение поставщика служб шифрования для закрытого ключа сертификата X.509 на MSDN.
Продвижение своими сайтами как стратегия роста и независимости