Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline НикитаА  
#1 Оставлено : 7 мая 2014 г. 17:06:54(UTC)
НикитаА

Статус: Новичок

Группы: Участники
Зарегистрирован: 07.05.2014(UTC)
Сообщений: 2
Откуда: Самара

Здравствуйте!
Интересует как в Java подписать и верифицировать при помощи CryptoPro массив байт.

У меня был опыт использования openSSL:
Код:

    public static PrivateKey getPrivateKey(String privateKeyPath) throws FileNotFoundException, IOException, NoSuchAlgorithmException {
        //String keyPath = "/home/me/Documents/ИЭМК/x509_OpenSSL_13.01.2014/key.pem";
        BufferedReader br = new BufferedReader(new FileReader(privateKeyPath));
        Security.addProvider(new BouncyCastleProvider());
        KeyPair kp = (KeyPair) new PEMReader(br, new PasswordFinder() {
            @Override
            public char[] getPassword() {
                return "password".toCharArray();
            }
        }).readObject();
        PrivateKey aPrivate = kp.getPrivate();
        //samlResponse.sign(Signature.getInstance("SHA1withRSA").toString(), kp.getPrivate(), certs);
        return aPrivate;
    }

    public static byte[] sign2(byte[] text, String privateKeyPath) throws NoSuchAlgorithmException, InvalidKeyException, SignatureException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, FileNotFoundException, IOException {
        PrivateKey privateKey = getPrivateKey(privateKeyPath);
// Compute signature
        Signature instance = Signature.getInstance("SHA1withRSA");
        instance.initSign(privateKey);
        instance.update(text);
        byte[] signature = instance.sign();
        //verify(text, signature, "/home/me/SVN/branches/Nikita/HL7CDA/7.3.1/SocketDebug/z2/selfsigned.crt");
        return signature;
    }


Тестовый код верификации:
Код:

            try {
                final CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
                final Collection<? extends Certificate> certs =
                        (Collection<? extends Certificate>) certFactory.generateCertificates(new FileInputStream(new File(certPath)));
                Iterator<? extends Certificate> certIterator = certs.iterator();

                while (certIterator.hasNext()) {
                    Certificate cert = certIterator.next();
                    System.out.println("Certificate information:");
                    System.out.println(cert.toString());
                    System.out.println("------------------------");
                    Signature signature = Signature.getInstance("SHA1withRSA");
                    signature.initVerify(cert);
                    signature.update(message);
                    boolean verify = signature.verify(sign);
                    if (verify) {
                        System.out.println("Verify status: Success");
                        System.out.println();
                    } else {
                        System.out.println("Verify status: Failed");
                        System.out.println();
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }


Как сделать это при помощи CryptoPro?
Что для этого нужно?
Какие нужны jar-библиотеки?
Что нужно установить?
Наверное нужен криптопровайдер и usb-ключ?
Есть ли пример кода?
Есть ли документация?
Что можно скачать?
Offline Евгений Афанасьев  
#2 Оставлено : 7 мая 2014 г. 17:42:26(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 4,001
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 713 раз в 673 постах
Здравствуйте.
См. https://www.cryptopro.ru...oducts/csp/jcp/downloads
В архиве есть документация (Doc), примеры в samples-sources.jar (CMS_samples и др.).
Offline sniker  
#3 Оставлено : 8 мая 2014 г. 14:30:04(UTC)
sniker

Статус: Активный участник

Группы: Участники
Зарегистрирован: 16.01.2013(UTC)
Сообщений: 33
Российская Федерация

Сказал(а) «Спасибо»: 15 раз
1
Offline НикитаА  
#4 Оставлено : 14 мая 2014 г. 16:03:26(UTC)
НикитаА

Статус: Новичок

Группы: Участники
Зарегистрирован: 07.05.2014(UTC)
Сообщений: 2
Откуда: Самара

Здравствуйте!
Как я понял, для наших нужд требуется JCP.
Он у вас продаётся отдельно и стоит 650 руб за одну лицензию.
У наших заказчиков просто уже куплен CSP. Рабочих мест много и им бы не очень хотелось докупать ещё и JCP.
Кроме того, оказалось, что кто-то у нас писал какую-то DLL'ку, которая через winapi производит все необходимые манипуляции (подпись, проверка подписи, шифрование, выдача списка отозванных сертификатов и т.д.).
Мы решили просто прикрутить эту dll'ку к Java-клиенту, правда работать такой вариант будет только под виндавозиной.
Offline Евгений Афанасьев  
#5 Оставлено : 14 мая 2014 г. 17:41:17(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 4,001
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 713 раз в 673 постах
Здравствуйте.
Попробуйте провайдер JCSP.jar в последнем дистрибутиве, он использует CryptoAPI (cspjni). Там же есть документация на него.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (2)
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.