Пример создания сообщения для ГИС ЖКХ и подпись его в формате XAdES без КриптоПро .NET. Реализован простой пример отправки/получения сообщений в ГИС ЖКХ для асинхронных сервисов
Описание классов:
MessageInspectorBehavior реализация интерфейса WCF позволяет проверять или изменять входящие или исходящие сообщения клиента System.ServiceModel.Dispatcher.IClientMessageInspector для осуществления подписи Xades сообщений.
ServicePointConfig для настройки tls соединений с поддержкой ГОСТ
HouseManagmentProvider пример реализии обобщенного интерфейса IProviderBase и наследуется от ClientBaseType, ClientBaseType служит для настройки экземпляра клиента WCF (клиентской авторизация и.т.п.). сервиса HouseManagmentAsync. Чтобы выполнить запрос к ГИС ЖКХ необходимо создать экземпляр провайдера и вызвать метод Send, метод Send возвращает объект реализущий IAck. Для получения результата запроса необходимо вызвать TryGetResult провайдера с передачей IAck и IGetStateResult в качестве параметра.
Интерфейсы IAck и IGetStateResult являются контрактами и реализуются в HCS\Service\OuterContracts.cs в ручную для каждого сервиса.
Данный проект создан на основе https://github.com/Good-Samaritan/signature-demo-net и является форком билблиотеки Microsoft.Xades Xades: Библиотека представляет собой обертку над доработанной библиотекой из проекта Microsoft France.
Функционал по подписанию документов и проверке подписи скрыт за фасадным классом GostXadesBesService. Реализация проверок и алгоритма подписи частично содержится в классе XadesBesSignedXml.
GostXadesBesService - Фасад для работы с ЭЦП - имеет параметризированный конструктор в котором указывается тип использумого криптопровайдера
XadesBesSignedXml - Обертка над XadeSignedXml из проекта Library, реализующая алгоритмы подписания и проверки подписи
CertificateMatcher - Поиск сертификата, использованного для подписания документа
GostCryptoProvider - Получению алгоритмов хеширования и форматеров подписи специфичных для ГОСТ.
IssuerComparer - Проверка соответствия строки Issuer сертификатов
При проверке корректности ЭЦП выполняются следующие проверки:
• корректность ЭЦП XMLDSIG;
• отсутствие свойств, не используемых в XAdES-BES.
• корректность информации о сертификате;
• доверительность корневого сертификата (сертификат должен быть установлен в качестве «Доверенного корневого центра сертификации»);
• действительность сертификата на дату проверки.
Xades Kit from Microsoft France https://github.com/Caliper/Xades