Статус: Участник
Группы: Участники
Зарегистрирован: 13.10.2013(UTC) Сообщений: 13
Сказал(а) «Спасибо»: 4 раз
|
Спасибо, Юрий, за пояснения. Осталось узнать, как это в КриптоПро JCP сделать.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,001 Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 712 раз в 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)
| Причина: Не указана |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 13.10.2013(UTC) Сообщений: 13
Сказал(а) «Спасибо»: 4 раз
|
То есть с помощью библиотеки cades.jar добавить сертификат в подпись не получится? Я имею ввиду с помощью методов addSigner и добавлением определенного атрибута.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,001 Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 712 раз в 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)
| Причина: Не указана |
|
1 пользователь поблагодарил Евгений Афанасьев за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 13.10.2013(UTC) Сообщений: 13
Сказал(а) «Спасибо»: 4 раз
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close