| ||||
| ||||
Добрый день. Я пробую подписать некий текст с помощью ЭЦП (КриптоПро 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); } Заранее спасибо, Сергей Париев. | ||||
Ответы: | ||||
| ||||
Я ошибся в номере версии JCP - на самом деле используется версия 1.0.18 | ||||
| ||||
Это ошибка. Исправлена, в следующем билде ее не будет. Спасибо. | ||||
| ||||
Спасибо за оперативный ответ. Кстати, я обнаружил, что если не изменять параметры хеширования (как это делается в примере), а использовать умолчательные, ошибка не возникает. Может быть, это поможет. | ||||