Статус: Участник
Группы: Участники
Зарегистрирован: 18.09.2019(UTC) Сообщений: 14
Сказал(а) «Спасибо»: 3 раз
|
Здравствуйте. Позавчера отладил подпись документа отсоединенной подписью формата Cades XLT1. Сегодня возникла необходимость переустановки jdk. Сохранить конфигурацию JDK я не додумался, понадеявшись, что при установке JCP+JCSP никаких трудностей не возникнет. В результате переустановки, естественно, всё перестало работать. Самостоятельно искать причину поломки уже не осталось никаких сил, поэтому прошу помощи. JCP и JCSP были установлены по инструкции. Все необходимые зависимости импортированы. Приведенный ниже код позавчера давал на выходе отсоединенную подпись нужного формата. Проблема в том, что сейчас не получается получить приватный ключ из хранилища (хранилище тоже не изменялось). Причина проблемы где-то в конфигурации jdk. Заранее спасибо! Код:System.setProperty("com.sun.security.enableCRLDP", "true");
System.setProperty("ru.CryptoPro.reprov.enableCRLDP", "true");
System.setProperty("com.ibm.security.enableCRLDP", "true");
String tsaUrl = "http://testca2012.cryptopro.ru/tsp/tsp.srf";
try {
IXAdESConfig config = XAdESConfig.CONFIG_2012_S_WITH_PASS;
final KeyStore keyStore = KeyStore.getInstance(config.getKeyStoreType(), config.getDefaultProvider());
char[] pass = "123456".toCharArray();
keyStore.load(new FileInputStream("C:\\my.keystore"), pass);
PrivateKey privateKey = (PrivateKey) keyStore.getKey("oms", "whatever".toCharArray());
Certificate[] chain = /*new Certificate[8];*/ {
keyStore.getCertificate("oms"),
keyStore.getCertificate("ocspcert"),
keyStore.getCertificate("ocsp_root")
};
Enumeration<String> en = keyStore.aliases();
while (en.hasMoreElements()){
System.out.println(en.nextElement());
}
X509Certificate[] xChain = new X509Certificate[chain.length];
System.arraycopy(chain, 0, xChain, 0, chain.length);
Collection<X509CertificateHolder> certHolders = new ArrayList<X509CertificateHolder>(chain.length);
for (Certificate cert : chain) {
certHolders.add(new X509CertificateHolder(cert.getEncoded()));
}
CollectionStore store = new CollectionStore(certHolders);
ByteArrayOutputStream signature = new ByteArrayOutputStream();
CAdESSignature cAdESSignature = new CAdESSignature(true);
cAdESSignature.addSigner(config.getDefaultProvider(),
/*JCP.GOST_DIGEST_2012_256_OID*/ config.getDigestMethod(),
/*JCP.GOST_PARAMS_EXC_2012_256_KEY_OID*/ config.getSignatureMethod(),
privateKey,
Arrays.asList(chain),
CAdESType.CAdES_X_Long_Type_1,
tsaUrl, /*null,*/
false);
byte[] data;
File file = new File("C:\\Work\\HDImageStore\\PDF\\a\\pdf.pdf");
data = Files.readAllBytes(Paths.get(file.getAbsolutePath()));
cAdESSignature.open(signature);
cAdESSignature.update(data);
cAdESSignature.setCertificateStore(store);
cAdESSignature.close();
byte[] cadesCMS = signature.toByteArray();
OutputStream os = new FileOutputStream("pdf.bin");
os.write(cadesCMS);
os.close();
FileInputStream cades = new FileInputStream("pdf.bin");
CAdESSignature checksignature = new CAdESSignature(cades, new FileInputStream(file) *//*null*//*, CAdESType.CAdES_X_Long_Type_1);
checksignature.verify(Arrays.asList(chain));
} catch (IOException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (CertificateException e) {
e.printStackTrace();
} catch (UnrecoverableKeyException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
} catch (NoSuchProviderException e) {
e.printStackTrace();
} catch (CAdESException e) {
e.printStackTrace();
}
 Snimok.PNG (28kb) загружен 12 раз(а). log.txt (43kb) загружен 6 раз(а).
|
|
|
|
Статус: Сотрудник
Группы: Модератор, Участники Зарегистрирован: 03.12.2018(UTC) Сообщений: 1,215  Сказал(а) «Спасибо»: 101 раз Поблагодарили: 285 раз в 265 постах
|
в config.getKeyStoreType() что у вас? приложите скриншот вкладки "Оборудование" где находится ваш закрытый ключ? |
|
 1 пользователь поблагодарил Санчир Момолдаев за этот пост.
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Так вы пытаетесь ключ прочитать из файла хранилища сертификатов, а надо из контейнера, load(null, null) при условии, что keyStore с типом HDIMAGE и т.п. Отредактировано пользователем 3 октября 2019 г. 20:57:58(UTC)
| Причина: Не указана |
|
 2 пользователей поблагодарили Евгений Афанасьев за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 18.09.2019(UTC) Сообщений: 14
Сказал(а) «Спасибо»: 3 раз
|
Извиняюсь за беспокойство. Удалось решить проблему самостоятельно. Для решения нужно было указать во вкладке оборудования путь к файлам ключа. После чего возникала ошибка установки пути сертификации для tsp, что устранилось добавлением сертификатов соотв. служб в cacerts
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close