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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline JackTheCat  
#1 Оставлено : 13 июля 2015 г. 12:15:31(UTC)
JackTheCat

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

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

Здравствуйте.
Наша система интегрируется с ЕСИА по средствам OAuth2. Необходимо в запросе отправить подпись от определённых параметров в данном формате.
Процесс подписания был сделан на основе примера CAdES/PKCS7Example.java, однако на тестовой площадке ЕСИА возникает ошибка Signature validation error: Malformed content..
Подскажите, пожалуйста, что я делаю не так и как исправить эту ситуацию?

Код:
    
    private static final String KEY_STORE_TYPE = "HDImageStore";
    private static final String ENCODING = "UTF-8";


    public static String sign(String phrase, Crypto crypto) throws Exception {

        final PKCS7Signer signer = new PKCS7Signer();
        final byte[] phraseBytes = phrase.getBytes(ENCODING);

        final byte[] signedBytes = signer.signPKCS7(phraseBytes, signer.loadKeyStore(crypto), crypto);

        return Base64.encodeBase64URLSafeString(signedBytes);

    }

    private KeyStore loadKeyStore(final Crypto crypto) throws Exception {

        final KeyStore keyStore = KeyStore.getInstance(KEY_STORE_TYPE);
        HDImageStore.setDir(crypto.getPath());
        keyStore.load(null, null);

        return keyStore;
    }


    private byte[] signPKCS7(byte[] phraseBytes, KeyStore keyStore, Crypto crypto) throws Exception {
        // Добавляем криптопровайдер
        Security.addProvider(new BouncyCastleProvider());

        // Заменяем GOST-алгоритм 
        Utility.initJCPAlgorithms();

        final String alias = crypto.getAlias();

        final List<Certificate> certificateChain = Arrays.asList(keyStore.getCertificateChain(alias));

        // Конвертируем цепочку в X509Certificate.
        final Collection<X509Certificate> chain
                = Arrays.asList(certificateChain.toArray(new X509Certificate[certificateChain.size()]));

        // Сертификат подписи - первый в списке.
        final X509Certificate certificate = chain.iterator().next();

        final PrivateKey privateKey
                = (PrivateKey)keyStore.getKey(alias, crypto.getPassword().toCharArray());

        final CertStore certStore = CertStore.getInstance("Collection", new CollectionCertStoreParameters(chain), "BC");

        // Подготавливаем подпись.
        final CMSSignedDataGenerator generator = new CMSSignedDataGenerator();
        generator.addSigner(privateKey, certificate, JCP.GOST_EL_DH_OID, JCP.GOST_DIGEST_OID);
        generator.addCertificatesAndCRLs(certStore);


        // Сформированная подпись.
        return generator.generate(new CMSProcessableByteArray(phraseBytes), true, JCP.PROVIDER_NAME).getEncoded();
    }


Offline Евгений Афанасьев  
#2 Оставлено : 13 июля 2015 г. 12:45:08(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 715 раз в 675 постах
Здравствуйте.

Автор: JackTheCat Перейти к цитате

Signature validation error: Malformed content..


Это сообщение ни о чем не говорит, уточните, что оно означает.
Кстати, true в generator.generate по идее означает совмещенную подпись, а не отделенную.
Offline JackTheCat  
#3 Оставлено : 13 июля 2015 г. 12:59:27(UTC)
JackTheCat

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

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

kafevanda Offline , спасибо за быстрый ответ!
Я пробовал с ключом false - всё равно подпись не принимается.

Насчёт ошибки, техподдержка ЕСИА написала следующее:
Цитата:
По Вашему обращению (INC000000961164) сообщаем: Ошибка Signature verification process failed. Подпись в запросе сформирована некорректно, ЕСИА не может её распаковать.
Offline Евгений Афанасьев  
#4 Оставлено : 13 июля 2015 г. 13:10:00(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 715 раз в 675 постах
Запросите у них образец подписи. Может быть, ее в base64 кодировать не надо.
Offline JackTheCat  
#5 Оставлено : 13 июля 2015 г. 14:57:22(UTC)
JackTheCat

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

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

Кодирование в base64 url safe - требование методрекомендаций:


Я запрашивал образец.
Offline Евгений Афанасьев  
#6 Оставлено : 13 июля 2015 г. 16:24:44(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 715 раз в 675 постах
Автор: JackTheCat Перейти к цитате
четырех параметров HTTP–запроса: scope, timestamp, clientId, state (без разделителей)

Вы их подписываете? Сравнивали asn-декодером подписи?
На счет записи ошибаюсь, это образец.

Отредактировано пользователем 13 июля 2015 г. 16:39:15(UTC)  | Причина: Не указана

Offline JackTheCat  
#7 Оставлено : 20 июля 2015 г. 16:39:02(UTC)
JackTheCat

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

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

Добрый день!
Автор: afev Перейти к цитате

Вы их подписываете?

Да, конечно, подписываются именно они.

Автор: afev Перейти к цитате

Сравнивали asn-декодером подписи?

Вот результаты asn-декодирования
Пример подписи
Моя подпись

Отредактировано пользователем 20 июля 2015 г. 16:41:46(UTC)  | Причина: Не указана

Offline ArtfulAngel  
#8 Оставлено : 11 сентября 2015 г. 8:36:26(UTC)
ArtfulAngel

Статус: Участник

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

Люди, подскажите пожалуйста как можно в php реализовать подпись запроса для передачи в ЕСИА по аналогии с Java?
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.