Я новичок в подписании/сертификате, но после проверки Google + SO я не могу найти ответ. У меня есть базовый код для создания подписи файла для отдельной подписи PKCS #7, и пока все хорошо... Клиент, который проверяет подпись, доволен сгенерированной подписью. Теперь у меня есть новое требование, чтобы включить дату/время, когда исходный файл был подписан с использованием атрибута времени подписи S/MIME.
Мой код до сих пор для работы с ним:
final Attribute signingAttribute = new Attribute(CMSAttributes.signingTime, new DERSet(new DERUTCTime(new Date())));
signedAttributes.add(new Attribute(CMSAttributes.contentType, new DERSet(new ASN1ObjectIdentifier("1.2.840.113549.1.7.1"))));
signedAttributes.add(new Attribute(CMSAttributes.messageDigest, new DERSet(new DEROctetString(hash))));
signedAttributes.add(signingAttribute);
final AttributeTable signedAttributesTable = new AttributeTable(signedAttributes);
final DefaultSignedAttributeTableGenerator signedAttributeGenerator = new DefaultSignedAttributeTableGenerator(signedAttributesTable);
// now proceed for the signing process with BouncyCastle
final JcaSimpleSignerInfoGeneratorBuilder builder = new JcaSimpleSignerInfoGeneratorBuilder().setProvider("BC").setDirectSignature(true);
builder.setSignedAttributeGenerator(signedAttributeGenerator);
final SignerInfoGenerator signerGenerator = builder.build("SHA1withRSA", key, cert);
final CMSSignedDataGenerator gen = new CMSSignedDataGenerator();
...
Затем код после этого тот же, что и для создания подписи... Но не работает.
Одна вещь, которой я на самом деле не являюсь, касается хэша для messageDigest:
signedAttributes.add(new Attribute(CMSAttributes.messageDigest, new DERSet(new DEROctetString(hash))));
Я получил хэш, сгенерированный как:
MessageDigest md = MessageDigest.getInstance("SHA1", "BC");
md.update(fileToSign.getBytes("UTF-8"));
hash = md.digest();
но я совершенно не уверен, что это правильный способ получить хэш? И общий способ получения сгенерированного атрибута времени подписи S/MIME...
Любые подсказки или общее объяснение того, что я пропустил, будут приветствоваться.