cryptopro-browser-plugin icon indicating copy to clipboard operation
cryptopro-browser-plugin copied to clipboard

Проблемы с подписанием PDF документа установленной подписью

Open pavenkostanislav opened this issue 8 years ago • 16 comments

Сможете помочь с самим подписанием?

Не выполняется строчка: 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)

pavenkostanislav avatar Sep 06 '17 05:09 pavenkostanislav

Посмотрю, что можно сделать

splincode avatar Sep 06 '17 07:09 splincode

Зараннее спасибо

pavenkostanislav avatar Sep 06 '17 07:09 pavenkostanislav

Должны выполняться требования для сертификатов, которые участвуют в подписании (ваш\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

splincode avatar Sep 07 '17 07:09 splincode

Да спасибо. С тестовой службой подпись создалась, но теперь проблема в проверке её:

Сервер электронной подписи КриптоПро 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

pavenkostanislav avatar Sep 07 '17 07:09 pavenkostanislav

В принципе, ответы оставляют на форуме сотрудники КриптоПро, если что пишите сюда решение

splincode avatar Sep 07 '17 07:09 splincode

Форум A certificate chain could not be built to a trusted root authority. (0x800B010A)

Пока нет ответа

но с начала переписки в приципе какая-то подпись создалась и ошибки нет больше.

Вот только эта подпись не проходит проверку в Контуре.Крипто и даже в КриптоПро DSS

pavenkostanislav avatar Sep 07 '17 07:09 pavenkostanislav

Приложите документ и подпись

splincode avatar Sep 07 '17 07:09 splincode

А подпись?

splincode avatar Sep 07 '17 08:09 splincode

sign.zip Вот так лучше всего. не все форматы можно добавлять

pavenkostanislav avatar Sep 07 '17 08:09 pavenkostanislav

Если код подписания выглядит так:

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); //}

pavenkostanislav avatar Sep 07 '17 09:09 pavenkostanislav

Это рабочая версия? Надо будет добавить код в основной репозиторий, когда появится новая версия, я обязательно вам пришли, чтобы вы сделали pull request

splincode avatar Sep 07 '17 10:09 splincode

Ну как рабочая. Сертификат проверку не проходит вырезка из рабочего проекта тут pavenkostanislav/GetingCertificatesList можно посмотреть, но если честно я его не компилил.

pavenkostanislav avatar Sep 07 '17 10:09 pavenkostanislav

подпись не проходит проверку.

Хеш указанного файла: 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.

splincode avatar Sep 07 '17 14:09 splincode

Ну для начала спасибо. Но мне бы больше информации. Я тем же путём создавал прикреплённую подпись - всё проходит проверку Ещё ошибку пофиксил: oSignedData.Content = dataToSign.replace('data:application/pdf;base64,', '');

pavenkostanislav avatar Sep 07 '17 15:09 pavenkostanislav

Доброе время суток, уже близок к усуществению отсоединённой подписи, присоединённая уже получается и проходит проверку на сайте Сервер электронной подписи КриптоПро 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

pavenkostanislav avatar Sep 08 '17 05:09 pavenkostanislav

Удалось ли что-нибудь сделать?

splincode avatar Sep 13 '17 11:09 splincode