Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

4 Страницы<1234>
Опции
К последнему сообщению К первому непрочитанному
Offline vas239  
#21 Оставлено : 20 августа 2015 г. 18:47:38(UTC)
vas239

Статус: Активный участник

Группы: Участники
Зарегистрирован: 10.02.2015(UTC)
Сообщений: 37
Российская Федерация
Откуда: Санкт-Петербург

Сказал(а) «Спасибо»: 7 раз
Автор: afev Перейти к цитате
Программно, с помощью класса Decoder (в пакете ru.CryptoPro.JCP.tools или ru.CryptoPro.JCP.Util).


Все-таки хотелось бы уточнить:

1. Вот тут было предположение, что подпись не проверяется на гос услугах, так как формат подпись не CAdES, а CMS. Сейчас я использую пример (из примеров jcp):


Код:
public static byte[] createHashCMSEx(final byte[] data, final boolean isExternalDigest,
                                         final PrivateKey[] keys, final Certificate[] certs, final String path,
                                         final boolean detached,
                                         final boolean addSignCertV2, final String digestOid, final String signOid,
                                         final String digestAlg,
                                         final String signAlg, final String providerName) throws Exception {
        //create hashCMS
        final ContentInfo all = new ContentInfo();
        all.contentType = new Asn1ObjectIdentifier(new OID(STR_CMS_OID_SIGNED).value);
        final SignedData cms = new SignedData();
        all.content = cms;
        cms.version = new CMSVersion(1);
        // digest
        cms.digestAlgorithms = new DigestAlgorithmIdentifiers(1);
        final DigestAlgorithmIdentifier a =  new DigestAlgorithmIdentifier(new OID(digestOid).value);
        a.parameters = new Asn1Null();
        cms.digestAlgorithms.elements[0] = a;
        // Нельзя сделать подпись совмещенной, если нет данных, а есть только хеш с них.
        if (isExternalDigest && !detached) {
            throw new Exception("Signature is attached but external digest is available only (not data)");
        }
        if (detached) {
            cms.encapContentInfo = new EncapsulatedContentInfo(
                    new Asn1ObjectIdentifier(new OID(STR_CMS_OID_DATA).value), null);
        } else {
            cms.encapContentInfo = new EncapsulatedContentInfo(new Asn1ObjectIdentifier(
                            new OID(STR_CMS_OID_DATA).value), new Asn1OctetString(data));
        }
        // certificates
        final int nCerts = certs.length;
        cms.certificates = new CertificateSet(nCerts);
        cms.certificates.elements = new CertificateChoices[nCerts];
        for (int i = 0; i < cms.certificates.elements.length; i++) {
            final ru.CryptoPro.JCP.ASN.PKIX1Explicit88.Certificate certificate =
                    new ru.CryptoPro.JCP.ASN.PKIX1Explicit88.Certificate();
            final Asn1BerDecodeBuffer decodeBuffer = new Asn1BerDecodeBuffer(certs[i].getEncoded());
            certificate.decode(decodeBuffer);
            cms.certificates.elements[i] = new CertificateChoices();
            cms.certificates.elements[i].set_certificate(certificate);
        }
        // Signature.getInstance
        final Signature signature = Signature.getInstance(signAlg, providerName);
        byte[] sign;
        // signer infos
        final int nsign = keys.length;
        cms.signerInfos = new SignerInfos(nsign);
        for (int i = 0; i < cms.signerInfos.elements.length; i++) {
            cms.signerInfos.elements[i] = new SignerInfo();
            cms.signerInfos.elements[i].version = new CMSVersion(1);
            cms.signerInfos.elements[i].sid = new SignerIdentifier();
            final byte[] encodedName = ((X509Certificate) certs[i]).getIssuerX500Principal().getEncoded();
            final Asn1BerDecodeBuffer nameBuf = new Asn1BerDecodeBuffer(encodedName);
            final Name name = new Name();
            name.decode(nameBuf);
            final CertificateSerialNumber num = new CertificateSerialNumber(((X509Certificate) certs[i]).getSerialNumber());
            cms.signerInfos.elements[i].sid.set_issuerAndSerialNumber(new IssuerAndSerialNumber(name, num));
            cms.signerInfos.elements[i].digestAlgorithm = new DigestAlgorithmIdentifier(new OID(digestOid).value);
            cms.signerInfos.elements[i].digestAlgorithm.parameters = new Asn1Null();
            cms.signerInfos.elements[i].signatureAlgorithm = new SignatureAlgorithmIdentifier(new OID(signOid).value);
            cms.signerInfos.elements[i].signatureAlgorithm.parameters = new Asn1Null();
            //signedAttributes
            final int kmax = addSignCertV2 ? 4 : 3;
            cms.signerInfos.elements[i].signedAttrs = new SignedAttributes(kmax);
            //-contentType
            int k = 0;
            cms.signerInfos.elements[i].signedAttrs.elements[k] =
                    new Attribute(new OID(STR_CMS_OID_CONT_TYP_ATTR).value, new Attribute_values(1));
            final Asn1Type conttype = new Asn1ObjectIdentifier(new OID(STR_CMS_OID_DATA).value);
            cms.signerInfos.elements[i].signedAttrs.elements[k].values.elements[0] = conttype;
            //-Time
            k += 1;
            cms.signerInfos.elements[i].signedAttrs.elements[k] =
                    new Attribute(new OID(STR_CMS_OID_SIGN_TYM_ATTR).value, new Attribute_values(1));
            final Time time = new Time();
            final Asn1UTCTime utcTime = new Asn1UTCTime();
            //текущая дата с календаря
            utcTime.setTime(Calendar.getInstance());
            time.set_utcTime(utcTime);
            cms.signerInfos.elements[i].signedAttrs.elements[k].values.elements[0] =
                    time.getElement();
            //-message digest
            k += 1;
            cms.signerInfos.elements[i].signedAttrs.elements[k] =
                    new Attribute(new OID(STR_CMS_OID_DIGEST_ATTR).value, new Attribute_values(1));
            final byte[] messageDigestBlob;
            // Если вместо данных у нас хеш, то сразу его передаем, ничего не вычисляем.
            if (isExternalDigest) {
                messageDigestBlob = data;
            } else {
                if (detached) {
                    messageDigestBlob = digestm(data, digestAlg, providerName);
                } else {
                    messageDigestBlob = digestm(cms.encapContentInfo.eContent.value, digestAlg, providerName);
                }
            }
            final Asn1Type messageDigest = new Asn1OctetString(messageDigestBlob);
            cms.signerInfos.elements[i].signedAttrs.elements[k].values.elements[0] = messageDigest;
            // Добавление signingCertificateV2 в подписанные аттрибуты, чтобы подпись стала похожа на CAdES-BES.
            if (addSignCertV2) {
                // Собственно, аттрибут с OID'ом id_aa_signingCertificateV2.
                k += 1;
                cms.signerInfos.elements[i].signedAttrs.elements[k] = new Attribute(
                        new OID(ALL_PKIX1Explicit88Values.id_aa_signingCertificateV2).value, new Attribute_values(1));
                // Идентификатор алгоритма хеширования, который использовался для
                // хеширования контекста сертификата ключа подписи.
                final DigestAlgorithmIdentifier digestAlgorithmIdentifier =
                        new DigestAlgorithmIdentifier(new OID(digestOid).value);
                // Хеш сертификата ключа подписи.
                final CertHash certHash = new CertHash(digestm(certs[i].getEncoded(), digestAlg, providerName));
                // Issuer name из сертификата ключа подписи.
                GeneralName generalName = new GeneralName();
                generalName.set_directoryName(name);
                GeneralNames generalNames = new GeneralNames();
                generalNames.elements = new GeneralName[1];
                generalNames.elements[0] = generalName;
                // Комбинируем издателя и серийный номер.
                IssuerSerial issuerSerial = new IssuerSerial(generalNames, num);
                ESSCertIDv2 essCertIDv2 = new ESSCertIDv2(digestAlgorithmIdentifier, certHash, issuerSerial);
                _SeqOfESSCertIDv2 essCertIDv2s = new _SeqOfESSCertIDv2(1);
                essCertIDv2s.elements = new ESSCertIDv2[1];
                essCertIDv2s.elements[0] = essCertIDv2;
                // Добавляем сам аттрибут.
                SigningCertificateV2 signingCertificateV2 = new SigningCertificateV2(essCertIDv2s);
                cms.signerInfos.elements[i].signedAttrs.elements[k].values.elements[0] = signingCertificateV2;
            }
            //signature
            Asn1BerEncodeBuffer encBufSignedAttr = new Asn1BerEncodeBuffer();
            cms.signerInfos.elements[i].signedAttrs.encode(encBufSignedAttr);
            final byte[] hsign = encBufSignedAttr.getMsgCopy();
            signature.initSign(keys[i]);
            signature.update(hsign);
            sign = signature.sign();
            cms.signerInfos.elements[i].signature = new SignatureValue(sign);
        }
        // encode
        final Asn1BerEncodeBuffer asnBuf = new Asn1BerEncodeBuffer();
        all.encode(asnBuf, true);
        final byte[] msgCopy = asnBuf.getMsgCopy();
        if (path != null) {
            Array.writeFile(path, msgCopy);
        }
        return msgCopy;
    }


и в комментарии указано, что "Добавление signingCertificateV2 в подписанные аттрибуты, чтобы подпись стала похожа на CAdES-BES.". То есть формат подписи все равно остается CMS? И причина того, что проверка на госуслугах может не проходить все та же - не тот формат?

2. Если в указанном примере подпись все равно создается в формате CMS, то подскажите, пожалуйста, как создать подпись в формате CAdES при условии использования JCP 1.0.54 (повторюсь, что версия 2.0 не подходит, так как она не сертифицирована).
Offline Евгений Афанасьев  
#22 Оставлено : 21 августа 2015 г. 9:07:35(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 4,003
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Этот код тоже формирует подпись формата CAdES-BES с вложенным сертификатом (cms.certificates.elements[i].set_certificate(certificate)), только с использованием более низкоуровневых функций. Запросите подпись на той стороне и сравните форматы, возможно, есть какие-то существенные отличия (или сравните каким-нибудь asn1-редактором полученную подпись и подпись плагина).
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
vas239 оставлено 21.08.2015(UTC)
Offline vas239  
#23 Оставлено : 24 августа 2015 г. 15:43:17(UTC)
vas239

Статус: Активный участник

Группы: Участники
Зарегистрирован: 10.02.2015(UTC)
Сообщений: 37
Российская Федерация
Откуда: Санкт-Петербург

Сказал(а) «Спасибо»: 7 раз
Автор: afev Перейти к цитате
Этот код тоже формирует подпись формата CAdES-BES с вложенным сертификатом (cms.certificates.elements[i].set_certificate(certificate)), только с использованием более низкоуровневых функций. Запросите подпись на той стороне и сравните форматы, возможно, есть какие-то существенные отличия (или сравните каким-нибудь asn1-редактором полученную подпись и подпись плагина).


Я воспользовалась вот этим редактором - https://lapo.it/asn1js/. Итог: почти все совпадает - во всяком случае информация про цепочки сертификатов идентична. Разница только в самом конце:

подпись от плагина:

Код:
SEQUENCE(2 elem)
OBJECT IDENTIFIER1.2.643.2.2.19
SEQUENCE(2 elem)
OBJECT IDENTIFIER1.2.643.2.2.36.0
OBJECT IDENTIFIER1.2.643.2.2.30.1
OCTET STRING(64 byte) DB2D7A129CF6BF480F323BA46D31827AD9301A3FC865031CDB21AB10AF7EB446CD9185…


подпись JCP:

Код:
SEQUENCE(2 elem)
OBJECT IDENTIFIER1.2.643.2.2.19
NULL
OCTET STRING(64 byte) 986569451D584ECF49B3A0CBE5351147C03E4B445C0F1BEF16E9CC56F828107A0CC1E7…


то есть от плагина есть
Код:
SEQUENCE(2 elem)
OBJECT IDENTIFIER1.2.643.2.2.36.0
OBJECT IDENTIFIER1.2.643.2.2.30.1
Offline Евгений Афанасьев  
#24 Оставлено : 24 августа 2015 г. 15:49:57(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 4,003
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Вряд ли проблема в этом - для проверки подписи используется сертификат с его параметрами. С помощью JCP пробовали проверить подпись плагина?
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
vas239 оставлено 24.08.2015(UTC)
Offline vas239  
#25 Оставлено : 24 августа 2015 г. 16:33:22(UTC)
vas239

Статус: Активный участник

Группы: Участники
Зарегистрирован: 10.02.2015(UTC)
Сообщений: 37
Российская Федерация
Откуда: Санкт-Петербург

Сказал(а) «Спасибо»: 7 раз
Автор: afev Перейти к цитате
Вряд ли проблема в этом - для проверки подписи используется сертификат с его параметрами. С помощью JCP пробовали проверить подпись плагина?


С помощью JCP валидирую так:

Код:
private static ValidationResultEnum verifySignature(final SignatureHolder signature) {

        if (!verifyInternalSignature(signature)) {
            return ValidationResultEnum.INCONSISTENT_SIGN;
        }
        if (!checkGostDigestOnSignature(signature)) {
            return ValidationResultEnum.INCORRECT_CHECKSUM;
        }
        return ValidationResultEnum.SUCCESS;
    }


Код:
    /**
     * Проверка подписи
     * @param signature подпись
     * @param certificate сертификат
     * @return валидна ли подпись
     */
    public static boolean verifyInternalSignature(final SignatureHolder signature, final Certificate certificate) {
        try {
            Certificate cert = certificate;
            if (cert == null) {
                cert = signature.getCertificatesList().get(0);
            }
            final java.security.Signature sig = java.security.Signature.getInstance(JCP.GOST_EL_SIGN_NAME, JCP.PROVIDER_NAME);
            sig.initVerify(cert);
            final byte[] signedContent = signature.getHashedSignedContent();
            if (signedContent == null) {
                LOG.warn("Signed content should be provided for signature check");
                return true;
            } else {
                sig.update(signedContent);
            }

            return sig.verify(signature.getSignature());
        } catch (Exception e) {
            return false;
        }
    }



Код:
    /**
     * Проверка ГОСТ знаков.
     * @param signature подпись
     * @return валидность
     */
    public static boolean checkGostDigestOnSignature(final SignatureHolder signature) {
        if (signature.getContentDigest() == null) {
            LOG.debug("skip message-digest check");
            return true;
        }
        if (signature.getSignedContent() == null) {
            LOG.warn("Signed content should be provided for digest check");
            return true;
        } else {
            try {
                final byte[] digest = CryptoUtils.makeDigest(signature.getSignedContent(), CryptoUtils.DIGEST_ALG_NAME);
                return Array.toHexString(digest).equals(Array.toHexString(signature.getContentDigest()));
            } catch (Exception e) {
                return false;
            }
        }
    }


проверка проходит (ValidationResultEnum.SUCCESS)

Отредактировано пользователем 24 августа 2015 г. 16:34:20(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#26 Оставлено : 24 августа 2015 г. 16:49:23(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 4,003
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Запросить образец подписи у стороны-получателя возможно?
Offline vas239  
#27 Оставлено : 24 августа 2015 г. 18:11:45(UTC)
vas239

Статус: Активный участник

Группы: Участники
Зарегистрирован: 10.02.2015(UTC)
Сообщений: 37
Российская Федерация
Откуда: Санкт-Петербург

Сказал(а) «Спасибо»: 7 раз
Автор: afev Перейти к цитате
Запросить образец подписи у стороны-получателя возможно?


Я, конечно, написала письмо в тех. поддержку, но не уверена в скором ответе.

Со списком сертификатов понятно - там должны быть все промежуточные сертификаты. А список PrivateKey? Я в этот список кладу только приватный ключ сертификата, которым подписываю. Может этого не достаточно?
Offline vas239  
#28 Оставлено : 25 августа 2015 г. 9:36:51(UTC)
vas239

Статус: Активный участник

Группы: Участники
Зарегистрирован: 10.02.2015(UTC)
Сообщений: 37
Российская Федерация
Откуда: Санкт-Петербург

Сказал(а) «Спасибо»: 7 раз
Автор: afev Перейти к цитате
Запросить образец подписи у стороны-получателя возможно?


Вот что мне ответили:

Уважаемый пользователь!

Образец сертификата квалифицированной электронной подписи не предоставляется.

Формат сертификата ключа проверки электронной подписи должен соответствовать:
• требованиям Федерального закона от 06.04.2011 г. № 63-ФЗ «Об электронной подписи»;
• требованиям приказа ФСБ России от 27.12.2011 № 795 «Об утверждении требований к форме электронного сертификата ключа электронной подписи» (приказ зарегистрирован в Минюсте России 27.01.2012 г. под № 23041).

Правила формирования аккредитованными удостоверяющими центрами квалифицированных сертификатов ключей проверки электронной подписи изложены в разработанных Минкомсвязью России «Методических рекомендациях по составу квалифицированного сертификата ключа проверки электронной подписи».

В сертификате должен быть указан СНИЛС уполномоченного лица организации.

Сертификат должен размещаться на носителях, сертифицированных в соответствии с российским законодательством.

Offline Евгений Афанасьев  
#29 Оставлено : 25 августа 2015 г. 10:08:28(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 4,003
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Попробуйте сделать подпись средствами CAdES API (модуль CAdES.jar) из JCP 2.0, проверить, подойдет ли она.
Offline vas239  
#30 Оставлено : 25 августа 2015 г. 16:08:47(UTC)
vas239

Статус: Активный участник

Группы: Участники
Зарегистрирован: 10.02.2015(UTC)
Сообщений: 37
Российская Федерация
Откуда: Санкт-Петербург

Сказал(а) «Спасибо»: 7 раз
Автор: afev Перейти к цитате
Попробуйте сделать подпись средствами CAdES API (модуль CAdES.jar) из JCP 2.0, проверить, подойдет ли она.


перешла на версию <jcp.version>2.0.37886</jcp.version>:

Код:
public static byte[] createCAdESSignature(final byte[] data, final KeyStoreHolder keyStoreHolder, final List<Certificate> root) {
        try {

            // Задаем провайдер подписи и хеширования Java CSP.
            System.setProperty(CAdESConfig.DEFAULT_PROVIDER, "JCP");

            // Включаем возможность онлайновой проверки.
            System.setProperty("ru.CryptoPro.reprov.enableCRLDP", "true");
            System.setProperty("com.sun.security.enableCRLDP", "true");
            System.setProperty("com.ibm.security.enableCRLDP", "true");

            final Collection<X509Certificate> chain = getX509Certificates(keyStoreHolder, root);
            final PrivateKey privateKey = keyStoreHolder.getPrivateKey();
            final CAdESSignature cadesSignature = new CAdESSignature(true);
            final CollectionStore certStore = new CollectionStore(getChainHolder(chain));
            cadesSignature.setCertificateStore(certStore);
            // Создаем подписанта CAdES-BES.
            cadesSignature.addSigner("JCP",
                    getDigestOid(privateKey),
                    getPublicKeyOid(privateKey),
                    privateKey,
                    chain,
                    CAdESType.CAdES_BES,
                    null, false);
            try (ByteArrayOutputStream outSignatureStream = new ByteArrayOutputStream()){
                cadesSignature.open(outSignatureStream);
                cadesSignature.update(data);
                cadesSignature.close();
                byte[] signedMessage = outSignatureStream.toByteArray();
                System.out.println("Signature: " + new Encoder().encode(signedMessage));
                return signedMessage;
            }
        } catch (Exception e) {
            Configuration.printCAdESException(e);
            return null;
        }
    }



Код:
private static Collection<X509CertificateHolder> getChainHolder(final Collection<X509Certificate> chain) {
        Collection<X509CertificateHolder> holders = new ArrayList<>();
        for (X509Certificate cert : chain) {
            try {
                holders.add(new X509CertificateHolder(cert.getEncoded()));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return holders;
    }

private static String getDigestOid(final PrivateKey privateKey) {

        String privateKeyAlgorithm = privateKey.getAlgorithm();

        if (privateKeyAlgorithm.equalsIgnoreCase(JCP.GOST_EL_2012_256_NAME) ||
                privateKeyAlgorithm.equalsIgnoreCase(JCP.GOST_DH_2012_256_NAME)) {
            return JCP.GOST_DIGEST_2012_256_OID;
        } else if (privateKeyAlgorithm.equalsIgnoreCase(JCP.GOST_EL_2012_512_NAME) ||
                privateKeyAlgorithm.equalsIgnoreCase(JCP.GOST_DH_2012_512_NAME)) {
            return JCP.GOST_DIGEST_2012_512_OID;
        } // if

        return JCP.GOST_DIGEST_OID;
    }

    private static String getPublicKeyOid(final PrivateKey privateKey) {

        String privateKeyAlgorithm = privateKey.getAlgorithm();

        if (privateKeyAlgorithm.equalsIgnoreCase(JCP.GOST_EL_2012_256_NAME) ||
                privateKeyAlgorithm.equalsIgnoreCase(JCP.GOST_DH_2012_256_NAME)) {
            return JCP.GOST_PARAMS_SIG_2012_256_KEY_OID;
        } else if (privateKeyAlgorithm.equalsIgnoreCase(JCP.GOST_EL_2012_512_NAME) ||
                privateKeyAlgorithm.equalsIgnoreCase(JCP.GOST_DH_2012_512_NAME)) {
            return JCP.GOST_PARAMS_SIG_2012_512_KEY_OID;
        } // if

        return JCP.GOST_EL_KEY_OID;

    }


    private static Collection<X509Certificate> getX509Certificates(final KeyStoreHolder keyStoreHolder, final List<Certificate> root) {
        final Collection<X509Certificate> chain = new ArrayList<>();
        final List<Certificate> lChain = new ArrayList<>();
        lChain.addAll(root);
        lChain.addAll(Arrays.asList(keyStoreHolder.getCertificateChain()));
        // Конвертируем цепочку в X509Certificate.
        final Collection<X509Certificate> xChain =
                Arrays.asList((lChain).toArray(new X509Certificate[lChain.size()]));
        chain.addAll(xChain);
        return chain;
    }



На сайте гос услуг по-прежнему - Электронная подпись недействительна

Но в таком варианте:
Подлинность документа НЕ ПОДТВЕРЖДЕНА

ЭП 1: НЕ ВЕРНА
Статус сертификата подписи: Не проверялся
Владелец : УЦ 1 ИС ГУЦ, RU, 77 г. Москва, Москва, Минкомсвязь России, 125375 г. Москва ул. Тверская д.7, dit@minsvyaz.ru, 1047702026701, 007710474375
Издатель: Головной удостоверяющий центр, 007710474375, 1047702026701, Минкомсвязь России, "125375 г. Москва, ул. Тверская, д. 7", Москва, 77 г. Москва, RU, dit@minsvyaz.ru
Действителен: с 2013.12.05 по 2017.12.04


То есть информация про владельца - не мой сертификат, а сертификат из цепочки. При этом, если первым в список Collection<X509Certificate> положить мой сертификат, то получаю exception:

Код:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:196)
	at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:268)
	at ru.CryptoPro.reprov.CPCertPathBuilder.engineBuild(Unknown Source)
	at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:268)
	at ru.CryptoPro.CAdES.e.a.b.a(Unknown Source)
	at ru.CryptoPro.CAdES.e.a.b.a(Unknown Source)
	at ru.CryptoPro.CAdES.e.a.b.a(Unknown Source)
	at ru.CryptoPro.CAdES.CAdESSignature.addSigner(Unknown Source)
	at ru.CryptoPro.CAdES.CAdESSignature.addSigner(Unknown Source)


В приложении лог из консоли. log_cert_list.txt (351kb) загружен 4 раз(а).

Отредактировано пользователем 25 августа 2015 г. 18:03:00(UTC)  | Причина: Не указана

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (2)
4 Страницы<1234>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.