Статус: Активный участник
Группы: Участники
Зарегистрирован: 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. Это верное направление, или есть более простой и прямой способ?
|