Статус: Участник
Группы: Участники
Зарегистрирован: 17.11.2011(UTC) Сообщений: 14
|
Улучшаю подпись c помощью cades.dll При проверке крипто арм выдает сообщение "Подпись не содержит штампа времени на доказательства подлинности либо он недействителен" Используется функции библиотеки cades.dll, указанную в мануале: http://www.cryptopro.ru/...dapienhancecadesbes.htmlИсходная подпись нормально проходит проверку в крипто арм в аттаче – артефакты процесса создания улучшенной подписи: · приватный ключ · csr · сертификат · данные · подпись · улучшенная подпись По-идее штам времени -- это обязательная часть усовершенствованной подписи. Библиотека его всегда должна добавлять. Или это не так? Вложение(я): enchanced-signature.zip (17kb) загружен 28 раз(а).У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 10.12.2008(UTC) Сообщений: 924 Откуда: Крипто-Про Поблагодарили: 99 раз в 95 постах
|
Штамп времени на доказательства подлинности в вашей улучшенной подписи присутствует. Нужно разбираться, почему КриптоАРМ не считает его действительным. Может быть не установлен сертификат корневого УЦ? Смотрите требования для проверки УЭЦП здесь.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 14.07.2008(UTC) Сообщений: 1,287 Откуда: Краснодар Сказал «Спасибо»: 81 раз Поблагодарили: 72 раз в 60 постах
|
1. По моему опыту: 0x80004005 свидетельствует об отсутствии какого-то из сертификатов цепочки доверия в соответствующих хранилищах (в простейшем случае - корневого сертификата в хранилище "Доверенные корневые центры сертификации") и\или об отсутствии действительного на момент проверки списка отозванных сертификатов в хранилище "Промежуточные центры сертификации". 2. Не знаю, как работает "КриптоАРМ", но если он использует настройки IE (что вполне вероятно), то в панели управления в "Свойства обозревателя" на вкладке "Дополнительно" отключите галочку "Проверять, не отозван ли сертификат сервера"
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,340 Сказал «Спасибо»: 550 раз Поблагодарили: 2212 раз в 1727 постах
|
КриптоАРМ
Произошла ошибка при получении подписей из сообщения
Ошибка сохранения сообщения (0x80004005)
Произошла ошибка при загрузке сообщения. Вероятно, сообщение имеет некорректный формат. (0x80004005)
Произошла ошибка при загрузке подписанных данных
Произошла ошибка при добавлении данных в сообщение
Указан неправильный алгоритм. (0x80090008) (0x80004005)
ОК
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 08.12.2011(UTC) Сообщений: 2
|
нашли проблему и решение: подписывали данные алгоритмом, отличным от указанного в сертификате. Код:
public byte[] sign(byte[] data) throws Exception {
/* initialize data to sign with CMS structure */
CMSTypedData msg = new CMSProcessableByteArray(data);
/* create CMS signature data builder */
CMSSignedDataGenerator gen = new CMSSignedDataGenerator();
/* provide required certificates */
gen.addCertificates(new JcaCertStore(Arrays.asList(certificate)));
/* initialize content signer (message digest) */
// ContentSigner contentSigner = new JcaContentSignerBuilder("SHA256withRSA") // это была бага
// .setProvider("BC").build(privateKey);
AlgorithmIdentifier sigAlgId = certificate.getSignatureAlgorithm();
AlgorithmIdentifier digAlgId = new DefaultDigestAlgorithmIdentifierFinder().find(sigAlgId);
ContentSigner contentSigner = new BcRSAContentSignerBuilder(sigAlgId, digAlgId)
.build(PrivateKeyFactory.createKey(privateKey.getEncoded()));
/* initialize digest provider (where to get digest from) */
DigestCalculatorProvider calculatorProvider = new JcaDigestCalculatorProviderBuilder()
.setProvider("BC").build();
/* Cades-bes signed attributes generator */
CMSAttributeTableGenerator signedGen
= new CadesBesSignedAttributeTableGenerator(certificate);
/* force to add cades-bes attributes into CMS structure */
SignerInfoGenerator signerInfoGenerator = new JcaSignerInfoGeneratorBuilder(calculatorProvider)
.setSignedAttributeGenerator(signedGen)
.build(contentSigner, certificate);
gen.addSignerInfoGenerator(signerInfoGenerator);
/* sign data */
CMSSignedData signedData = gen.generate(msg, true);
/* return signed CMS structure */
return signedData.getEncoded();
}
При этом используем самописный генератор аттрибутов для Cades-Bes подписи: Код:
/**
* Cades-Bes attributes generator
*/
public class CadesBesSignedAttributeTableGenerator extends DefaultSignedAttributeTableGenerator {
private static final Logger LOG = LoggerFactory.getLogger(CadesBesSignedAttributeTableGenerator.class);
/**
* Signer certificate to add into the attributes table
*/
private final X509CertificateHolder signer;
/**
* Signing certificate version
*/
private final int version;
/**
* Creates cades-bes attributes table generator
*
* @param signer signer certificate to add into the attributes table
*/
public CadesBesSignedAttributeTableGenerator(X509CertificateHolder signer) {
this(signer, 2);
}
/**
* Creates cades-bes attributes table generator
*
* @param signer signer certificate to add into the attributes table
* @param version (1) to use default signing certificate or (2) to use signing certificate v2
*/
public CadesBesSignedAttributeTableGenerator(X509CertificateHolder signer, int version) {
this.signer = signer;
this.version = version;
}
@Override
protected Hashtable createStandardAttributeTable(Map parameters) {
@SuppressWarnings({"unchecked"})
Hashtable<ASN1ObjectIdentifier, Attribute> table = super.createStandardAttributeTable(parameters);
switch (version) {
case 1:
// generate and add signing certificate (v1) into the attributes table
addSigningCertificate(table);
break;
case 2:
// generate and add signing certificate (v2) into the attributes table
addSigningCertificateV2(table);
break;
default:
throw new IllegalStateException("unsupported signing certificate version: " + version);
}
return table;
}
/**
* Add signing certificate (v1) into the attributes table
*
* @param table attributes table to add signing certificate (v1) to
*/
// IT WORKS!!!
private void addSigningCertificate(Hashtable<ASN1ObjectIdentifier, Attribute> table) {
LOG.trace("generate signing certificate v1");
final IssuerSerial signerSerial = new IssuerSerial(
new GeneralNames(new GeneralName(signer.getIssuer())),
new DERInteger(signer.getSerialNumber()));
ESSCertID essCertid = new ESSCertID(
getSignerHash("SHA-1"), // sha-1 - required by specification
signerSerial);
table.put(PKCSObjectIdentifiers.id_aa_signingCertificate, new Attribute(
PKCSObjectIdentifiers.id_aa_signingCertificate,
new DERSet(new SigningCertificate(essCertid))
));
}
/**
* Add signing certificate (v2) into the attributes table
*
* @param table attributes table to add signing certificate (v2) to
*/
// IT WORKS TOO!!!
private void addSigningCertificateV2(Hashtable<ASN1ObjectIdentifier, Attribute> table) {
LOG.trace("generate signing certificate v2");
final IssuerSerial signerSerial = new IssuerSerial(
new GeneralNames(new GeneralName(signer.getIssuer())),
new DERInteger(signer.getSerialNumber()));
ESSCertIDv2 essCertid = new ESSCertIDv2(
// sha-1 - is the only algorithm understanded by cspwrap.exe utility
new AlgorithmIdentifier(X509ObjectIdentifiers.id_SHA1),
// new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha512),
getSignerHash("SHA-1"),
signerSerial);
table.put(PKCSObjectIdentifiers.id_aa_signingCertificateV2, new Attribute(
PKCSObjectIdentifiers.id_aa_signingCertificateV2,
new DERSet(new SigningCertificateV2(new ESSCertIDv2[]{essCertid}))
));
}
/**
* Get hash of signer certificate
*
* @param algorithm algorithm to generate hash from the signer certificate
* @return hash of signer certificate
*/
private byte[] getSignerHash(String algorithm) {
try {
return MessageDigest.getInstance(algorithm).digest(signer.getEncoded());
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
тему можно закрывать. Отредактировано пользователем 21 декабря 2011 г. 16:07:50(UTC)
| Причина: Не указана
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close