Статус: Новичок
Группы: Участники
Зарегистрирован: 29.09.2020(UTC) Сообщений: 3
|
Автор: Евгений Афанасьев Здравствуйте. В составе samples-sourcces.jar есть: 1) в пакете CAdES - высокоуровневые примеры создания CAdES-подписи с помощью CAdES.jar (CAdES-BES, T, Long Type 1); 2) в пакете CMS_samples - низкоуровневые примеры создания CMS-подписи: CMS, CMSSign, CMSVerify; 3) в пакете digital_marking - пример DigitalMarkingExample создания CAdES-подписи для ЧестныйЗнак. Добрый день, воспользовался примером из пакета digital_marking, подпись сформировалась, но валидацию в честном знаке она не проходит. Также я сверяю то, что у меня получилось с подписью, формируемой на тестовой странице - https://www.cryptopro.ru...ge/cades_bes_sample.html . Должны ли они совпадать, если подписываются одни и те же данные? У меня они различаются. При этом подпись, сформированная на тестовой странице, валидацию проходит. Как понять что я делаю не так? Подскажите, пжл. Моя подпись всегда начинается с символов - MIAG, а на тестовой странице - MIIb. Код: Код:
public static void main(String[] args) throws Exception {
// JCPInit.initProviders(false);
Security.addProvider(new JCP());
Security.addProvider(new RevCheck());
byte[] encoded = Base64.getEncoder().encodeToString("Hello World".getBytes(StandardCharsets.UTF_8)).getBytes();
byte[] sign = sign(
"alias", // key alias
"".toCharArray(), // key password
encoded // data to be signed
);
Encoder encoder = new Encoder();
System.out.println(encoder.encode((sign)));
}
public static byte[] sign(String alias, char[] password, byte[] data) throws Exception {
KeyStore keyStore = KeyStore.getInstance(JCP.HD_STORE_NAME);
keyStore.load(null, null);
PrivateKey privateKey = (PrivateKey)
keyStore.getKey(alias, password);
System.setProperty("com.sun.security.enableCRLDP", "true");
System.setProperty("com.ibm.security.enableCRLDP", "true");
System.setProperty("com.sun.security.enableAIAcaIssuers", "true");
System.setProperty("ru.CryptoPro.reprov.enableAIAcaIssuers", "true");
Certificate[] certificates = keyStore
.getCertificateChain(alias);
List<X509Certificate> chain =
new ArrayList<X509Certificate>();
for (Certificate cert : certificates) {
chain.add((X509Certificate) cert);
}
CAdESSignature cAdESSignature = new CAdESSignature(true);
cAdESSignature.addSigner(
JCP.PROVIDER_NAME, // signature provider // провайдер подписи
JCP.GOST_DIGEST_2012_256_OID,
JCP.GOST_PARAMS_EXC_2012_256_KEY_OID,
privateKey, // signing key // ключ подписанта
chain, // signing certificate chain // цепочка сертификатов подписанта
CAdESType.CAdES_BES,
null,
false,
null,
null,
null, // no CRL files
true // add the signing certificate chain to the signature // добавить цепочку подписанта в подпись
);
ByteArrayOutputStream signatureStream
= new ByteArrayOutputStream();
try (signatureStream) {
cAdESSignature.open(signatureStream);
cAdESSignature.update(data);
cAdESSignature.close();
}
return signatureStream.toByteArray();
}
Отредактировано пользователем 6 октября 2020 г. 10:16:49(UTC)
| Причина: Не указана
|