23.11.2006 17:06:51JCP + bouncycastle, у кого работает? Ответов: 4
Артем
Не работает, 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");
 
Ответы:
24.11.2006 13:14:07Артем
Ну что, никто не использует JCP для формирования PKCS7-signed сообщений? Или, может быть, есть другие методы (кроме как построения формата PKCS7 собственными силами)?
28.11.2006 6:09:53Василий
Тут:
http://forum.java.sun.com/thread.jspa?threadID=532742&messageID=2724110

приведен исходник тулзы которая использует сановский класс PKCS7 для упаковки PKCS#7-сообщений. Вроде рабочее, но надо заменить строчки вида AlgorithmId.getAlgorithmId(digestAlgorithm) на что-то вроде AlgorithmId.get(JCP.GOST_DIGEST_OID) иначе не находит. Аналогично с получением OID алгоритма подписи.
12.02.2007 11:00:12wraith
Проблема судя по всему в том, что BouncyCastle пытается создать подпись используя наименование алгоритма: GOST3411withGOST3410
а надо использовать GOST3411withGOST3410EL.
После некоторых исследований и проверок, выяснилось, что если соответственно подправить исходники BouncyCastle, то все работает нормально.
А относительно сановского класса PKCS7 для упаковки PKCS#7-сообщений. Сама SUN весьма не рекомендует использовать такие классы, т.к. они в любом из последующих билдов java могут уже не работать и даже уже на другой платформе могут отрабатывать иначе.
12.02.2007 16:51:16Василий
Да, мне тоже в итоге пришлось поправить сурцы BouncyCastle - оказалось проще, чем докручивать тот внутренний сановски класс.