Проблемы с подписанием PDF документа установленной подписью
Сможете помочь с самим подписанием?
Не выполняется строчка:
let sSignedMessage = yield oSignedData.SignCades(oSigner, CADESCOM_CADES_X_LONG_TYPE_1);
Ошибка неустановленного корневого сертификата, но он установлен аж в 3 директориив личные с "Доверенные корневые центры сертификации" и "Доверенные лица"
A certificate chain could not be built to a trusted root authority. (0x800B010A)
Посмотрю, что можно сделать
Зараннее спасибо
Должны выполняться требования для сертификатов, которые участвуют в подписании (ваш\TSP и т.п.) - должны быть корневые сертификаты в доверенных корневых. Посмотрите ответы здесь: http://www.cryptopro.ru/forum2/default.aspx?g=posts&m=83361#post83361
Если используете тестовую службу: скачайте и установите тестовый корневой сертификат "Тестовый УЦ ООО "КРИПТО-ПРО"". http://www.cryptopro.ru/forum2/default.aspx?g=posts&m=83398#post83398
Да спасибо. С тестовой службой подпись создалась, но теперь проблема в проверке её:
Сервер электронной подписи КриптоПро DSS Результат проверки
Название документа spravka_soc_viplaty_09.08.2017.pdf.p7s Подпись 1 Результат проверки Подпись не действительна
Дополнительная информация Не удалось проверить подпись CAdES-XLT1. Ошибка: [Неправильное значение хеша]. Код: [0x80091007].Сообщение содержит неверную подпись.
Дополнительная информация о подписи Формат подписи CAdES Подпись в формате XLT1
Время подписи, полученное из штампа 9/7/2017 10:21:14 AM Время подписи 9/7/2017 10:21:02 AM
Информация о сертификате Субъект C=RU, S=Нижегородская Область, L=Нижний Новгород, O="ООО ""КазАУП""", OU=Отдел разработки, CN=Stanislav, [email protected] Издатель CN=CRYPTO-PRO Test Center 2, O=CRYPTO-PRO LLC, L=Moscow, C=RU, [email protected] Срок действия 07.09.2017 09:43:43 - 07.12.2017 09:53:43
В принципе, ответы оставляют на форуме сотрудники КриптоПро, если что пишите сюда решение
Форум A certificate chain could not be built to a trusted root authority. (0x800B010A)
Пока нет ответа
но с начала переписки в приципе какая-то подпись создалась и ошибки нет больше.
Вот только эта подпись не проходит проверку в Контуре.Крипто и даже в КриптоПро DSS
Приложите документ и подпись
А подпись?
sign.zip Вот так лучше всего. не все форматы можно добавлять
Если код подписания выглядит так:
this.crypto.then(
() => {
this.crypto.signature(certThumbprint, file.file)
.then(
(res: any) => {
this.PDFBase64String = res;
console.log(this.PDFBase64String);
let b64Data = this.PDFBase64String;
if (b64Data) {
let contentType = 'application/pkcs7-signature';
//let byteCharacters: string;
//if (this.crypto.isChromium) {
// byteCharacters = window.atob(b64Data);
//} else {
// byteCharacters = Base64.decode(b64Data);
//}
let byteNumbers = new Array(b64Data.length);
for (var i = 0; i < b64Data.length; i++)
byteNumbers[i] = b64Data.charCodeAt(i);
let byteArray = new Uint8Array(byteNumbers);
let blob = new Blob([byteArray], { type: contentType });
console.log(blob.size);
let url = window.URL.createObjectURL(blob);
if (window.navigator.msSaveBlob) {
window.navigator.msSaveOrOpenBlob(blob, file.description + ".p7s");
} else {
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.setAttribute('download', file.description + ".p7s");
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
}
}
, (error) => {
console.error(error);
});
}
, (error) => {
console.error(error);
});
}
Тогда: sign.zip
Ключевое отличие тут:
//let byteCharacters: string; //if (this.crypto.isChromium) { // byteCharacters = window.atob(b64Data); //} else { // byteCharacters = Base64.decode(b64Data); //}
Это рабочая версия? Надо будет добавить код в основной репозиторий, когда появится новая версия, я обязательно вам пришли, чтобы вы сделали pull request
Ну как рабочая. Сертификат проверку не проходит вырезка из рабочего проекта тут pavenkostanislav/GetingCertificatesList можно посмотреть, но если честно я его не компилил.
подпись не проходит проверку.
Хеш указанного файла: CB AE CB 61 1C 3B F9 6A 8E B1 63 B3 CE E7 EA D5 05 1F A4 C1 9B EF 15 FB 98 64 1F 3D 0C BB 84 C3
а в p7s прохешировано было что-то "другое": 64 D5 52 BF 80 B9 0E B1 C9 3D 29 83 5D 54 D5 57 0C F4 B0 45 9B 92 D9 79 D9 43 13 05 81 BB 2B FF
- ASN.1 анализатор выдал 1 предупреждение и 1 ошибку.
позиция: 3300 0: [0] Error: Object has zero length. 3302 15: GeneralizedTime 07/09/2017 07:21:15 GMT
Warning: Further data follows ASN.1 data at position 10798.
Ну для начала спасибо.
Но мне бы больше информации.
Я тем же путём создавал прикреплённую подпись - всё проходит проверку
Ещё ошибку пофиксил:
oSignedData.Content = dataToSign.replace('data:application/pdf;base64,', '');
Доброе время суток, уже близок к усуществению отсоединённой подписи, присоединённая уже получается и проходит проверку на сайте Сервер электронной подписи КриптоПро DSS. Возможно Вы сможете помочь с решением вопроса: "Отсоединённой подпись не проходит проверку, а присоединённая подпись проходит"
Вот этим кодом я делаю подпись:
function SignCreate(thumbprint, dataToSign) {
let oCertificate;
let oSigner;
let oSignedData;
let sSignedMessage;
let oStore = cadesplugin.CreateObject("CAPICOM.Store");
oStore.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE, CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);
let oCertificates = oStore.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SHA1_HASH, thumbprint);
if (oCertificates.Count == 0) {
return "Certificate not found: " + thumbprint;
}
oCertificate = oCertificates.Item(1);
oSigner = cadesplugin.CreateObject("CAdESCOM.CPSigner");
oSigner.Certificate = oCertificate;
oSigner.TSAAddress = "http://testca.cryptopro.ru/tsp/tsp.srf";
oSignedData = cadesplugin.CreateObject("CAdESCOM.CadesSignedData");
oSignedData.ContentEncoding = CADESCOM_BASE64_TO_BINARY;
oSignedData.Content = dataToSign.replace('data:application/pdf;base64,', '');
try {
sSignedMessage = oSignedData.SignCades(oSigner, CADESCOM_CADES_X_LONG_TYPE_1, true);
} catch (err) {
return "Failed to create signature. Error: " + GetErrorMessage(err);
}
try {
oSignedData.VerifyCades(sSignedMessage, CADESCOM_CADES_X_LONG_TYPE_1, true);
} catch (err) {
alert("Failed to verify signature. Error: " + cadesplugin.getLastError(err));
return false;
}
oStore.Close();
return sSignedMessage;
}
Пробую два варианта: Вариант отсоединённой подписи не проходит проверку ЭП в КриптоПро DSS: Код:
sSignedMessage = oSignedData.SignCades(oSigner, CADESCOM_CADES_X_LONG_TYPE_1, true);Цитата: Результат проверки Название документа spravka_soc_viplaty_09.08.2017.pdfОП.p7s Подпись 1 Результат проверки Подпись не действительна Дополнительная информация Не удалось проверить подпись CAdES-XLT1. Ошибка: [Неправильное значение хеша]. Код: [0x80091007].Сообщение содержит неверную подпись. Дополнительная информация о подписи Формат подписи CAdES Подпись в формате XLT1 Время подписи, полученное из штампа 9/8/2017 8:20:37 AM Время подписи 9/8/2017 8:20:21 AM Информация о сертификате Субъект C=RU, S=Нижегородская Область, L=Нижний Новгород, O="ООО ""КазАУП""", OU=Отдел разработки, CN=Stanislav, [email protected] Издатель CN=CRYPTO-PRO Test Center 2, O=CRYPTO-PRO LLC, L=Moscow, C=RU, [email protected] Срок действия 07.09.2017 09:43:43 - 07.12.2017 09:53:43
Вариант присоединённой подписи проверку проходит: Код:
sSignedMessage = oSignedData.SignCades(oSigner, CADESCOM_CADES_X_LONG_TYPE_1, false);Цитата:
Сервер электронной подписи КриптоПро DSS Результат проверки Название документа spravka_soc_viplaty_09.08.2017.pdfПП.p7s Подпись 1 Результат проверки Подпись действительна Дополнительная информация Отсутствует Дополнительная информация о подписи Формат подписи CAdES Подпись в формате XLT1 Время подписи, полученное из штампа 9/8/2017 8:39:21 AM Время подписи 9/8/2017 8:39:00 AM Информация о сертификате Субъект C=RU, S=Нижегородская Область, L=Нижний Новгород, O="ООО ""КазАУП""", OU=Отдел разработки, CN=Stanislav, [email protected] Издатель CN=CRYPTO-PRO Test Center 2, O=CRYPTO-PRO LLC, L=Moscow, C=RU, [email protected] Срок действия 07.09.2017 09:43:43 - 07.12.2017 09:53:43
Оба варианта отрабатывают без ошибок и возвращают на выходе файл Во вложении оба варианта рассмотрены sign.zip
Удалось ли что-нибудь сделать?