21.12.2006 11:59:01проблема с JCP Corrupted: ru.CryptoPro.JCP.KeyStore.JCPKeyStore Ответов: 3
Сергей
Добрый день.
Я пробую подписать некий текст с помощью ЭЦП (КриптоПро JCP 1.0.16 ), и у меня возникает следующая проблема : при запуске в первый раз код выполняется, текст подписывается; но при запуске во 2й раз вываливается следующая ошибка :

21.12.2006 11:39:52 ru.CryptoPro.JCP.tools.SelfTester z
INFO: ru.CryptoPro.JCP.Install.JCPInstaller added to SelfTester
21.12.2006 11:39:52 ru.CryptoPro.JCP.tools.SelfTester z
INFO: ru.CryptoPro.Crypto.JCryptoPInstaller added to SelfTester
21.12.2006 11:39:52 ru.CryptoPro.JCP.tools.SelfTester$TestVerifyClassJar run
INFO: file:/C:/jdk1.5.0_06/jre/lib/ext/JCP.jar is being checked...
21.12.2006 11:39:53 ru.CryptoPro.JCP.tools.SelfTester checkClass
SEVERE: Corrupted: ru.CryptoPro.JCP.KeyStore.JCPKeyStore
ru.CryptoPro.JCP.tools.SelfTesterException: Хеш на содержимое Jar файла отсутствует или неверный. Jar файл искажен
at ru.CryptoPro.JCP.tools.SelfTester.a(Unknown Source)
at ru.CryptoPro.JCP.tools.SelfTester.checkClass(Unknown Source)
at ru.CryptoPro.JCP.tools.i.a(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.JCPKeyStore.engineLoad(Unknown Source)
at java.security.KeyStore.load(KeyStore.java:1150)
at com.intellex.isugdp.service.crypto.CryptoUtil.signSomeText(CryptoUtil.java:131)
at com.intellex.isugdp.service.crypto.CryptoUtil.main(CryptoUtil.java:195)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)
Caused by: ru.CryptoPro.JCP.tools.SelfTesterException: Хеш на содержимое Jar файла отсутствует или неверный. Jar файл искажен
at ru.CryptoPro.JCP.tools.SelfTester$TestVerifyClassJar.run(Unknown Source)
... 12 more
Caused by: java.io.IOException: Хеш на содержимое Jar файла отсутствует или неверный. Jar файл искажен
at ru.CryptoPro.JCP.tools.JarChecker.c(Unknown Source)
at ru.CryptoPro.JCP.tools.JarChecker.e(Unknown Source)
at ru.CryptoPro.JCP.tools.JarChecker.checkJARSign(Unknown Source)
at ru.CryptoPro.JCP.tools.JarChecker.checkURLSign(Unknown Source)
... 13 more
Exception in thread "main" ru.CryptoPro.JCP.tools.SelfTesterException: Хеш на содержимое Jar файла отсутствует или неверный. Jar файл искажен
at ru.CryptoPro.JCP.tools.SelfTester.checkClass(Unknown Source)
at ru.CryptoPro.JCP.tools.i.a(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.JCPKeyStore.engineLoad(Unknown Source)
at java.security.KeyStore.load(KeyStore.java:1150)
at com.intellex.isugdp.service.crypto.CryptoUtil.signSomeText(CryptoUtil.java:131)
at com.intellex.isugdp.service.crypto.CryptoUtil.main(CryptoUtil.java:195)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)
Caused by: ru.CryptoPro.JCP.tools.SelfTesterException: Хеш на содержимое Jar файла отсутствует или неверный. Jar файл искажен
at ru.CryptoPro.JCP.tools.SelfTester.a(Unknown Source)
... 11 more
Caused by: ru.CryptoPro.JCP.tools.SelfTesterException: Хеш на содержимое Jar файла отсутствует или неверный. Jar файл искажен
at ru.CryptoPro.JCP.tools.SelfTester$TestVerifyClassJar.run(Unknown Source)
... 12 more
Caused by: java.io.IOException: Хеш на содержимое Jar файла отсутствует или неверный. Jar файл искажен
at ru.CryptoPro.JCP.tools.JarChecker.c(Unknown Source)
at ru.CryptoPro.JCP.tools.JarChecker.e(Unknown Source)
at ru.CryptoPro.JCP.tools.JarChecker.checkJARSign(Unknown Source)
at ru.CryptoPro.JCP.tools.JarChecker.checkURLSign(Unknown Source)
... 13 more


При этом сам файл JCP.jar идентичен файлу из дистрибутива. Аналогичная ошибка возникает и в контрольной панели JCP при попытке обратиться к любому хранилищу ключей :


c:\tools\JCP-Trial\lib>ControlPane.bat c:\jdk1.5.0_06\jre
---- Starting control pane
21.12.2006 11:55:03 ru.CryptoPro.JCP.tools.SelfTester z
INFO: ru.CryptoPro.JCP.Install.JCPInstaller added to SelfTester
21.12.2006 11:55:03 ru.CryptoPro.JCP.tools.SelfTester z
INFO: ru.CryptoPro.Crypto.JCryptoPInstaller added to SelfTester
21.12.2006 11:55:03 ru.CryptoPro.JCP.tools.SelfTester$TestVerifyClassJar run
INFO: file:/C:/jdk1.5.0_06/jre/lib/ext/JCP.jar is being checked...
21.12.2006 11:55:06 ru.CryptoPro.JCP.tools.SelfTester checkClass
SEVERE: Corrupted: ru.CryptoPro.JCP.KeyStore.JCPKeyStore
ru.CryptoPro.JCP.tools.SelfTesterException: Хеш на содержимое Jar файла отсутствует или неверный. Jar файл искажен
at ru.CryptoPro.JCP.tools.SelfTester.a(Unknown Source)
at ru.CryptoPro.JCP.tools.SelfTester.checkClass(Unknown Source)
at ru.CryptoPro.JCP.tools.i.a(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.JCPKeyStore.engineLoad(Unknown Source)
at java.security.KeyStore.load(KeyStore.java:1150)
at ru.CryptoPro.JCP.ControlPane.PageKeys$StoreView.c(Unknown Source)
at ru.CryptoPro.JCP.ControlPane.PageKeys$StoreView.a(Unknown Source)
at ru.CryptoPro.JCP.ControlPane.PageKeys$StoreView.d(Unknown Source)
at ru.CryptoPro.JCP.ControlPane.PageKeys$StoreView.a(Unknown Source)
at ru.CryptoPro.JCP.ControlPane.PageKeys.A(Unknown Source)
at ru.CryptoPro.JCP.ControlPane.PageKeys.k(Unknown Source)
at ru.CryptoPro.JCP.ControlPane.PageKeys$MyWillExpandListener.treeWillExpand(Unknown Source)
at javax.swing.JTree.fireTreeWillExpand(JTree.java:2302)
at javax.swing.JTree.setExpandedState(JTree.java:3000)
at javax.swing.JTree.expandPath(JTree.java:1742)
at javax.swing.plaf.basic.BasicTreeUI.toggleExpandState(BasicTreeUI.java:2189)
at javax.swing.plaf.basic.BasicTreeUI.handleExpandControlClick(BasicTreeUI.java:2176)
at javax.swing.plaf.basic.BasicTreeUI.checkForClickInExpandControl(BasicTreeUI.java:2130)
at javax.swing.plaf.basic.BasicTreeUI$Handler.handleSelectionImpl(BasicTreeUI.java:3495)
at javax.swing.plaf.basic.BasicTreeUI$Handler.handleSelection(BasicTreeUI.java:3480)
at javax.swing.plaf.basic.BasicTreeUI$Handler.mousePressed(BasicTreeUI.java:3461)
at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:222)
at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:221)
at java.awt.Component.processMouseEvent(Component.java:5485)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3126)
at java.awt.Component.processEvent(Component.java:5253)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3955)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3889)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1774)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
Caused by: ru.CryptoPro.JCP.tools.SelfTesterException: Хеш на содержимое Jar файла отсутствует или неверный. Jar файл искажен
at ru.CryptoPro.JCP.tools.SelfTester$TestVerifyClassJar.run(Unknown Source)
... 42 more
Caused by: java.io.IOException: Хеш на содержимое Jar файла отсутствует или неверный. Jar файл искажен
at ru.CryptoPro.JCP.tools.JarChecker.c(Unknown Source)
at ru.CryptoPro.JCP.tools.JarChecker.e(Unknown Source)
at ru.CryptoPro.JCP.tools.JarChecker.checkJARSign(Unknown Source)
at ru.CryptoPro.JCP.tools.JarChecker.checkURLSign(Unknown Source)
... 43 more
Exception in thread "AWT-EventQueue-0" ru.CryptoPro.JCP.tools.SelfTesterException: Хеш на содержимое Jar файла отсутствует или неверный. Jar файл искажен
at ru.CryptoPro.JCP.tools.SelfTester.checkClass(Unknown Source)
at ru.CryptoPro.JCP.tools.i.a(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.JCPKeyStore.engineLoad(Unknown Source)
at java.security.KeyStore.load(KeyStore.java:1150)
at ru.CryptoPro.JCP.ControlPane.PageKeys$StoreView.c(Unknown Source)
at ru.CryptoPro.JCP.ControlPane.PageKeys$StoreView.a(Unknown Source)
at ru.CryptoPro.JCP.ControlPane.PageKeys$StoreView.d(Unknown Source)
at ru.CryptoPro.JCP.ControlPane.PageKeys$StoreView.a(Unknown Source)
at ru.CryptoPro.JCP.ControlPane.PageKeys.A(Unknown Source)
at ru.CryptoPro.JCP.ControlPane.PageKeys.k(Unknown Source)
at ru.CryptoPro.JCP.ControlPane.PageKeys$MyWillExpandListener.treeWillExpand(Unknown Source)
at javax.swing.JTree.fireTreeWillExpand(JTree.java:2302)
at javax.swing.JTree.setExpandedState(JTree.java:3000)
at javax.swing.JTree.expandPath(JTree.java:1742)
at javax.swing.plaf.basic.BasicTreeUI.toggleExpandState(BasicTreeUI.java:2189)
at javax.swing.plaf.basic.BasicTreeUI.handleExpandControlClick(BasicTreeUI.java:2176)
at javax.swing.plaf.basic.BasicTreeUI.checkForClickInExpandControl(BasicTreeUI.java:2130)
at javax.swing.plaf.basic.BasicTreeUI$Handler.handleSelectionImpl(BasicTreeUI.java:3495)
at javax.swing.plaf.basic.BasicTreeUI$Handler.handleSelection(BasicTreeUI.java:3480)
at javax.swing.plaf.basic.BasicTreeUI$Handler.mousePressed(BasicTreeUI.java:3461)
at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:222)
at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:221)
at java.awt.Component.processMouseEvent(Component.java:5485)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3126)
at java.awt.Component.processEvent(Component.java:5253)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3955)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3889)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1774)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
Caused by: ru.CryptoPro.JCP.tools.SelfTesterException: Хеш на содержимое Jar файла отсутствует или неверный. Jar файл искажен
at ru.CryptoPro.JCP.tools.SelfTester.a(Unknown Source)
... 41 more
Caused by: ru.CryptoPro.JCP.tools.SelfTesterException: Хеш на содержимое Jar файла отсутствует или неверный. Jar файл искажен
at ru.CryptoPro.JCP.tools.SelfTester$TestVerifyClassJar.run(Unknown Source)
... 42 more
Caused by: java.io.IOException: Хеш на содержимое Jar файла отсутствует или неверный. Jar файл искажен
at ru.CryptoPro.JCP.tools.JarChecker.c(Unknown Source)
at ru.CryptoPro.JCP.tools.JarChecker.e(Unknown Source)
at ru.CryptoPro.JCP.tools.JarChecker.checkJARSign(Unknown Source)
at ru.CryptoPro.JCP.tools.JarChecker.checkURLSign(Unknown Source)
... 43 more
21.12.2006 11:55:06 ru.CryptoPro.JCP.tools.SelfTester$TestVerifyClassJar run
INFO: file:/C:/jdk1.5.0_06/jre/lib/ext/JCP.jar is being checked...
21.12.2006 11:55:07 ru.CryptoPro.JCP.tools.SelfTester run
INFO: SelfTester's test №24 failed
ru.CryptoPro.JCP.tools.SelfTesterException: Хеш на содержимое Jar файла отсутствует или неверный. Jar файл искажен
at ru.CryptoPro.JCP.tools.SelfTester.a(Unknown Source)
at ru.CryptoPro.JCP.tools.SelfTester.run(Unknown Source)
at java.lang.Thread.run(Thread.java:595)
Caused by: ru.CryptoPro.JCP.tools.SelfTesterException: Хеш на содержимое Jar файла отсутствует или неверный. Jar файл искажен
at ru.CryptoPro.JCP.tools.SelfTester$TestVerifyClassJar.run(Unknown Source)
... 3 more
Caused by: java.io.IOException: Хеш на содержимое Jar файла отсутствует или неверный. Jar файл искажен
at ru.CryptoPro.JCP.tools.JarChecker.c(Unknown Source)
at ru.CryptoPro.JCP.tools.JarChecker.e(Unknown Source)
at ru.CryptoPro.JCP.tools.JarChecker.checkJARSign(Unknown Source)
at ru.CryptoPro.JCP.tools.JarChecker.checkURLSign(Unknown Source)
... 4 more
---- Control pane finished
---- Script SUCCEEDED



Вот код, после которого все это происходит :


public static void signSomeText(String text) throws Exception {

String keyStoreName = "HDImageStore" ;
String alias = "RaUser-3a3fbe43-795e-4bc9-84a6-dac35765354f" ;

KeyStore hdImageStore = KeyStore.getInstance(keyStoreName);

hdImageStore.load(null, null);
Key privateKey = hdImageStore.getKey(alias,null);

Signature sig = Signature.getInstance("GOST3411withGOST3410EL", "JCP");
sig.initSign((PrivateKey) privateKey);

// получение параметров хеширования по умолчанию
ParamsInterface digestParams = AlgIdSpec.getDefaultDigestParams();
// получение всех допустимых идентификаторов параметров хеширования
Enumeration digestOids = digestParams.getOIDs();
// получение текущего идентификатора параметров хеширования
OID defOID = digestParams.getDefault();

// получение первого, отличного от текущего,
// идентификатора параметров хеширования
OID digestOid = null;
while (digestOids.hasMoreElements()){
digestOid = (OID)digestOids.nextElement();
if (!digestOid.equals(defOID))
break;
}

// изменение идентификатора параметров хеширования
// по умолчанию
digestParams.setDefault(digestOid);
// изменение параметров хеширования для подписи
sig.setParameter(digestParams);
// обработка подписываемых данных
sig.update(text.getBytes());
System.out.println("text = " + text);
// вычисление подписи
byte[] signature = sig.sign();

writeToFile("signed_text.txt",signature);
}


Заранее спасибо, Сергей Париев.
 
Ответы:
21.12.2006 12:01:20Сергей
Я ошибся в номере версии JCP - на самом деле используется версия 1.0.18
21.12.2006 17:43:28bor1
Это ошибка. Исправлена, в следующем билде ее не будет. Спасибо.
21.12.2006 17:47:41Сергей
Спасибо за оперативный ответ.
Кстати, я обнаружил, что если не изменять параметры хеширования (как это делается в примере), а использовать умолчательные, ошибка не возникает. Может быть, это поможет.