Добрый день, rvaleev!
В вашем пример используется параметр
oSigner.Options = 1; //CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN
на сколько он обязателен при проверке
http://www.gosuslugi.ru/pgu/eds/?у меня при вызове с таким параметром, программа пишет ошибку
Не удается построить цепочку сертификатов для доверенного корневого центра. (код ниже)
В сведениях о серфтикате пишет тоже самое, и что Есть закрытый ключ для этого сертификата
если вызвать с параметром CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY, то функция что-то возвращает, но тогда не проходит проверку на сайте госуслуг
и еще странный момент, подписанная строка содержит переходы на новую строку \r\n
Не подскажите как вы решили задачу целиком, со строчкой
// данные нужно создавать в формате UTF-8 и конвертировать их в base64. Затем отдавать на подпись.
спасибо
Для примера я подписывал простой текстовый файл, содержащий символ - 1.
CAPICOM.Store store = new CAPICOM.Store();
store.Open(CAPICOM.CAPICOM_STORE_LOCATION.CAPICOM_CURRENT_USER_STORE, "My");
CAPICOM.Certificate cer = store.Certificates[1];
store.Close();
CAdESCOM.CPSigner signer = new CAdESCOM.CPSigner();
CAdESCOM.CadesSignedData sd = new CAdESCOM.CadesSignedData();
CAPICOM.Utilities utils = new CAPICOM.Utilities();
signer.Certificate = cer;
sd.ContentEncoding = CAdESCOM.CADESCOM_CONTENT_ENCODING_TYPE.CADESCOM_BASE64_TO_BINARY;
sd.Content = utils.Base64Encode("1");
signer.Options = CAPICOM.CAPICOM_CERTIFICATE_INCLUDE_OPTION.CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY;
//signer.Options = CAPICOM.CAPICOM_CERTIFICATE_INCLUDE_OPTION.CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN;
string s = sd.SignCades(signer, CAdESCOM.CADESCOM_CADES_TYPE.CADESCOM_CADES_BES, true, CAdESCOM.CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);
s = s.Replace("\r\n", "");
System.IO.File.WriteAllText("c:\\1.bin", s, Encoding.ASCII);
Отредактировано пользователем 10 марта 2015 г. 12:40:41(UTC)
| Причина: Не указана