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

Уведомление

Icon
Error

6 Страницы«<456
Опции
К последнему сообщению К первому непрочитанному
Offline Aleksawka  
#51 Оставлено : 6 ноября 2013 г. 15:17:58(UTC)
Aleksawka

Статус: Участник

Группы: Участники
Зарегистрирован: 13.10.2013(UTC)
Сообщений: 13

Сказал(а) «Спасибо»: 4 раз
Спасибо, Юрий, за пояснения. Осталось узнать, как это в КриптоПро JCP сделать.
Offline Евгений Афанасьев  
#52 Оставлено : 6 ноября 2013 г. 15:44:19(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 713 раз в 673 постах
в CMSSign есть добавление сертификата (-ов) в подпись - в функциях ***CMS (signCMS, create*CMS), а в классе CMSVerify - в ф. CMSVerify - получение сертификатов из подписи. Если в ф. verifyOnCert (см. samples-sources.jar из JCP 2.0) нет проверки на соответствие signingCertificateV2, то как-то так:
Код:


...

//подписанные атрибуты(SignedAttr)
final Attribute[] signAttrElem = info.signedAttrs.elements;

// *** проверка атрибута signing-certificateV2 ***

final Asn1ObjectIdentifier signingCertificateV2Oid = new Asn1ObjectIdentifier(
    (new OID(ALL_PKIX1Explicit88Values.id_aa_signingCertificateV2)).value);
Attribute signingCertificateV2Attr = null;

//получаем атрибут
for (int r = 0; r < signAttrElem.length; r++) {
    final Asn1ObjectIdentifier oid = signAttrElem[r].type;
    if (oid.equals(signingCertificateV2Oid)) {
        signingCertificateV2Attr = signAttrElem[r];
    } // if
} // for

if (signingCertificateV2Attr != null) {

    SigningCertificateV2 signingCertificateV2 = (SigningCertificateV2)
       signingCertificateV2Attr.values.elements[0];
    _SeqOfESSCertIDv2 essCertIDv2s = signingCertificateV2.certs;

    for (int s = 0; s < essCertIDv2s.elements.length; s++) {

        ESSCertIDv2 essCertIDv2 = essCertIDv2s.elements[s];

        CertHash expectedCertHash = essCertIDv2.certHash;
        AlgorithmIdentifier expectedHashAlgorithm = essCertIDv2.hashAlgorithm;

        IssuerSerial expectedIssuerSerial = essCertIDv2.issuerSerial;
        Asn1BerEncodeBuffer encodedExpectedIssuerSerial = new Asn1BerEncodeBuffer();
        expectedIssuerSerial.encode(encodedExpectedIssuerSerial);

        OID expectedHashAlgorithmOid = new OID(expectedHashAlgorithm.algorithm.value);
        CertHash actualCertHash = new CertHash(
            CMStools.digestm(cert.getEncoded(), expectedHashAlgorithmOid.toString()));

        ru.CryptoPro.JCP.ASN.PKIX1Explicit88.Certificate certificate =
            new ru.CryptoPro.JCP.ASN.PKIX1Explicit88.Certificate();
        Asn1BerDecodeBuffer decodeBuffer = new Asn1BerDecodeBuffer(cert.getEncoded());
         certificate.decode(decodeBuffer);

        GeneralName[] issuerName = new GeneralName[1];
        issuerName[0] = new GeneralName(GeneralName._DIRECTORYNAME,
            certificate.tbsCertificate.issuer);
        GeneralNames issuerNames = new GeneralNames(issuerName);

        IssuerSerial actualIssuerSerial = new IssuerSerial(issuerNames,
            certificate.tbsCertificate.serialNumber);
        Asn1BerEncodeBuffer encodedActualIssuerSerial = new Asn1BerEncodeBuffer();
        actualIssuerSerial.encode(encodedActualIssuerSerial);

        if ( !(Arrays.equals(actualCertHash.value, expectedCertHash.value) &&
            Arrays.equals(encodedActualIssuerSerial.getMsgCopy(),
            encodedActualIssuerSerial.getMsgCopy())) ) {

            System.out.println("Не тот сертификат, не выполняем проверку.");
            return false;
        } // if

    } // for

} // if

...



Тем же путем можно искать сертификат в списке в подписи.

Отредактировано пользователем 6 ноября 2013 г. 15:54:17(UTC)  | Причина: Не указана

Offline Aleksawka  
#53 Оставлено : 6 ноября 2013 г. 15:55:39(UTC)
Aleksawka

Статус: Участник

Группы: Участники
Зарегистрирован: 13.10.2013(UTC)
Сообщений: 13

Сказал(а) «Спасибо»: 4 раз
То есть с помощью библиотеки cades.jar добавить сертификат в подпись не получится? Я имею ввиду с помощью методов addSigner и добавлением определенного атрибута.
Offline Евгений Афанасьев  
#54 Оставлено : 6 ноября 2013 г. 15:58:35(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 713 раз в 673 постах
Можно с помощью ф. setCertificateStore:
Код:


Collection<X509Certificate> chain = new ArrayList<X509Certificate>(); // список сертификатов
Collection<X509CertificateHolder> holderList = new ArrayList<X509CertificateHolder>();
...

for (X509Certificate cert : chain) {
    holderList.add(new X509CertificateHolder(cert.getEncoded()));
} // for

...
cadesSignature.setCertificateStore(new CollectionStore(holderList));

Отредактировано пользователем 6 ноября 2013 г. 16:04:14(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
Aleksawka оставлено 06.11.2013(UTC)
Offline Aleksawka  
#55 Оставлено : 6 ноября 2013 г. 16:08:18(UTC)
Aleksawka

Статус: Участник

Группы: Участники
Зарегистрирован: 13.10.2013(UTC)
Сообщений: 13

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