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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline auglov  
#1 Оставлено : 12 мая 2017 г. 10:04:45(UTC)
auglov

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

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

Сказал(а) «Спасибо»: 3 раз
Здравствуйте.

Так и не понял, как достать из CAdESSigner хранящуюся в нем цепочку сертификатов, чтобы потом применить ее для signer.enhance().

Я вижу ее в отладчике, с ней все в порядке, но все методы ее получения приватные. В старых примерах нашел метод getCAdESCertificates(). Сейчас его нет. А что есть взамен?



Offline Евгений Афанасьев  
#2 Оставлено : 12 мая 2017 г. 10:30:33(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 690 раз в 651 постах
Здравствуйте.
Метод getCAdESCertificates(), если не ошибаюсь, возвращал список сертификатов из атрибута certificate-values. По идее, список сертификатов уже должен быть в объекте signer, для которого выполняется enhance() (список заполняется при декодировании подписи и получением подписантов).
Offline auglov  
#3 Оставлено : 12 мая 2017 г. 10:48:32(UTC)
auglov

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

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

Сказал(а) «Спасибо»: 3 раз
В примере предлагается брать цепочку из хранилища ключей, как-то так:

Код:
	List<Certificate> lChain = Arrays.asList(keyStore.getCertificateChain(alias));


В моем случае, есть уже готовая подпись, которая приходит с клиента, созданная cadesplugin-ом в браузере с такими вот опциями:

Код:
            
oSigner = cadesplugin.CreateObject("CAdESCOM.CPSigner");
oSigner.Options = cadesplugin.CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN;


То есть, цепочка уже есть в подписи, все в порядке, незачем идти за ней еще куда-то, причем не понятно куда.

Далее я пробую сделать вот так:
Код:

            CAdESSignature cs = new CAdESSignature(new ByteArrayInputStream(sign), new ByteArrayInputStream(data), null);
            cs.verify(null);

            Collection<SignerInformation> updatedSignerInfos = new ArrayList<SignerInformation>();
            CAdESSigner[] signers = cs.getCAdESSignerInfos();
            for (int i = 0; i < signers.length; i++) {
                CAdESSigner signer = signers[i];
                if (signer instanceof CAdESSignerXLT1) {
                    updatedSignerInfos.add(signer.getSignerInfo());
                } else {
                    // TODO: Это не работает. 
                    CAdESSigner newSigner = signer.enhance(JCP.PROVIDER_NAME,
                            signDataHelper.getDigestOidBySignOid(signer.getSignerCertificate().getSigAlgOID()), // config.getDigestOid(),
                            null,// new ArrayList<X509Certificate>(), // Вот тут надо бы что-то типа signer.getCAdESCertificates()
                            cryptoConfig.tsaAddress,
                            CAdESType.CAdES_X_Long_Type_1,
                            new AttributeTable(new DERSet()) 
                    ); 
		}
	     }


И получаю ошибку

Certificate: sn 45d047e1000300031e28 issued by GeneralNames: 4: 1.2.643.100.1=1037700085444,1.2.643.3.131.1.1=007717107991,STREET=ул. Сущёвский вал\, д. 18,ST=77 г. Москва,L=Москва,E=info@cryptopro.ru,C=RU,O=ООО \"КРИПТО-ПРО\",CN=Тестовый УЦ ООО \"КРИПТО-ПРО\" not found]

Этот сертификат есть в доверенных, cs.verify(null) - проходит, все в порядке.

В отладчике видно, что в signer уже есть все нужные сертификаты.

Есть еще идея попробовать напрямую сделать разбор подписи через Asn1BerDecodeBuffer. Это верное направление, или есть более простой и прямой способ?


Offline Евгений Афанасьев  
#4 Оставлено : 12 мая 2017 г. 11:03:24(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 690 раз в 651 постах
Автор: auglov Перейти к цитате
Certificate: sn 45d047e1000300031e28 issued by GeneralNames: 4: 1.2.643.100.1=1037700085444,1.2.643.3.131.1.1=007717107991,STREET=ул. Сущёвский вал\, д. 18,ST=77 г. Москва,L=Москва,E=info@cryptopro.ru,C=RU,O=ООО \"КРИПТО-ПРО\",CN=Тестовый УЦ ООО \"КРИПТО-ПРО\" not found]

А что это за сертификат? Сертификат клиента?
Автор: auglov Перейти к цитате
Есть еще идея попробовать напрямую сделать разбор подписи через Asn1BerDecodeBuffer. Это верное направление, или есть более простой и прямой способ?

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

Отредактировано пользователем 12 мая 2017 г. 11:09:05(UTC)  | Причина: Не указана

Offline auglov  
#5 Оставлено : 12 мая 2017 г. 11:27:48(UTC)
auglov

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

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

Сказал(а) «Спасибо»: 3 раз
Там два сертификата в цепочке. Клиента и УЦ. Вот это сертификат тестового УЦ, вот этого: https://www.cryptopro.ru/ui/ (cacer3.crt)
Offline Евгений Афанасьев  
#6 Оставлено : 12 мая 2017 г. 11:44:11(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 690 раз в 651 постах
Можете сообщить версию JCP и приложить ваши сертификаты? И подпись, которую усовершенствуете. С похожими условиями воспроизвести не удалось.

Отредактировано пользователем 12 мая 2017 г. 11:44:52(UTC)  | Причина: Не указана

Offline auglov  
#7 Оставлено : 12 мая 2017 г. 13:10:31(UTC)
auglov

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

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

Сказал(а) «Спасибо»: 3 раз
jcp-2.0.38830

pf.txt (17kb) загружен 2 раз(а). - то, что пробую усовершенствовать (проходит проверку в cryptcp).
test_gge.rar (2kb) загружен 9 раз(а). - тестовый сертификат с корневым.
Offline Евгений Афанасьев  
#8 Оставлено : 12 мая 2017 г. 17:56:56(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 690 раз в 651 постах
Вы оказались правы, при усовершенствовании и наличии в подписи необходимых сертификатов получаем ошибку, если не передать их в ф. enhance(). Приносим извинения, исправление будет сделано в следующей версии. Пока решение в этом конкретном случае - передать сертификат подписанта в ф. enhance() (из signer.getSignerCertificate()).
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
auglov оставлено 13.05.2017(UTC)
Offline auglov  
#9 Оставлено : 13 мая 2017 г. 15:20:08(UTC)
auglov

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

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

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