| ||||
| ||||
Не работает, JCP ругается исключением java.security.InvalidKeyException: Операция создания подписи запрещена для алгоритма ГОСТ Р 34.10-94 Ключ и сертификат сгенерированы через JCP, и они 34.10-2001, а не 34.10-94 KeyStore ks = KeyStore.getInstance("HDImageStore", "JCP"); File f = new File(System.getProperty("user.home") + File.separator + ".keystore"); ks.load(new FileInputStream(f), storepass.toCharArray()); KeyStore.PrivateKeyEntry pkEntry = (KeyStore.PrivateKeyEntry)ks.getEntry("myKey", new KeyStore.PasswordProtection(keypass.toCharArray())); PrivateKey myPrivateKey = pkEntry.getPrivateKey(); X509Certificate cert = (X509Certificate)pkEntry.getCertificate(); CMSSignedDataGenerator gen = new CMSSignedDataGenerator(); gen.addSigner(myPrivateKey, cert, CMSSignedGenerator.DIGEST_GOST3411); //gen.addCertificatesAndCRLs(certs); CMSSignedData data = gen.generate(new CMSProcessableByteArray(str.getBytes()), "JCP"); | ||||
Ответы: | ||||
| ||||
Ну что, никто не использует JCP для формирования PKCS7-signed сообщений? Или, может быть, есть другие методы (кроме как построения формата PKCS7 собственными силами)? | ||||
| ||||
Тут: http://forum.java.sun.com/thread.jspa?threadID=532742&messageID=2724110 приведен исходник тулзы которая использует сановский класс PKCS7 для упаковки PKCS#7-сообщений. Вроде рабочее, но надо заменить строчки вида AlgorithmId.getAlgorithmId(digestAlgorithm) на что-то вроде AlgorithmId.get(JCP.GOST_DIGEST_OID) иначе не находит. Аналогично с получением OID алгоритма подписи. | ||||
| ||||
Проблема судя по всему в том, что BouncyCastle пытается создать подпись используя наименование алгоритма: GOST3411withGOST3410 а надо использовать GOST3411withGOST3410EL. После некоторых исследований и проверок, выяснилось, что если соответственно подправить исходники BouncyCastle, то все работает нормально. А относительно сановского класса PKCS7 для упаковки PKCS#7-сообщений. Сама SUN весьма не рекомендует использовать такие классы, т.к. они в любом из последующих билдов java могут уже не работать и даже уже на другой платформе могут отрабатывать иначе. | ||||
| ||||
Да, мне тоже в итоге пришлось поправить сурцы BouncyCastle - оказалось проще, чем докручивать тот внутренний сановски класс. | ||||