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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline FedrBodr  
#1 Оставлено : 31 октября 2023 г. 13:45:58(UTC)
FedrBodr

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

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

Приветсвую,
Наш партнер (НБКИ) ожидает от нас некий подписанный xml с присоединенной усиленной электронной подписью PKCS7/DER
У нас есть от партнера сертификаты .cer и .pfx

В качстве примера они прислали команду cryptcp
cryptcp -sign -thumbprint 8a9257818d6439f41af3b2ecba5302b2364495ec -der -nochain -cert -norev "testXmlForSig.xml" "testXmlForSig.xml.sign"

И у меня локально получилось выполнить подписание и снятие подписи
/opt/cprocsp/bin/cryptcp -verify -thumbprint 8a9257818d6439f41af3b2ecba5302b2364495ec -nochain -norev testXmlForSigLast.xml.sign testXmlForSig39.xml

Но когда пробую закодить по одному из примеров с samples-sources (пробовал CMSSign.java) - подпись потом снять тулзой cryptcp не могу.

Чаще всего видел что подпись визуально отличается с самого начала, последний тест который делал, пробовал по примеру CAdESSignature (последнее что нагуглил в форуме)
Пробовал другие алгоритмы подписи и не добавлять цепочку подписанта

Ниже код:
Код:

    fun sign(dataToSign: ByteArray, key: PrivateKey, cert: X509Certificate): ByteArray {
        val cadesSignature = CAdESSignature(true)  // совмещенная подпись
        val signerCertificateChain: List<X509Certificate> = listOf(cert)
        //здесь возникает ошибка
        cadesSignature.addSigner(
            JCP.PROVIDER_NAME, // Имя провайдера, который будет использоваться для создания подписи.
            JCP.GOST_DIGEST_NAME, // Идентификатор алгоритма хэширования, который будет использоваться для вычисления дайджеста (хэша) подписываемых данных.
            JCP.GOST_EL_SIGN_NAME, //JCP.GOST_EL_SIGN_NAME, // Идентификатор алгоритма подписи, который будет использоваться для создания электронной подписи.
            key, // Приватный ключ подписанта.
            signerCertificateChain, // Цепочка сертификатов подписанта.
            CAdESType.CAdES_BES, // Тип CAdES подписи.
            null, // Адрес TSA службы.
            false, // Заверяющая ли подпись.
            null, // Таблица подписанных аттрибутов для добавления в подпись.
            null, // Таблица неподписанных аттрибутов для добавления в подпись.
            null, // CRL (списков отзыва сертификатов), связанных с подписью.
            true // Добавить ли цепочку подписанта в подпись.
        )

        val outSignatureStream = ByteArrayOutputStream()
        cadesSignature.open(outSignatureStream)

        // Передаем на подпись данные (запрос в формате PKCS10).
        cadesSignature.update(dataToSign) // тело запроса

        cadesSignature.close()
        cadesSignature.close()

        // Выводим полученную подпись.
        val signature = outSignatureStream.toByteArray()
        val encoder = Encoder()

        val encodedSignature = encoder.encode(signature)
        println("Attached CAdES-BES [BASE64]:\n$encodedSignature")

        File("/Users/fedrbodr/IdeaProjects/webBankir/crypto/.tmp/test-signed.xml2.sign").writeBytes(signature)
        File("/Users/fedrbodr/IdeaProjects/webBankir/crypto/.tmp/test-signed.xml3.sign").writeText(encodedSignature)

        return signature
    }




Подскажите пожалуйста как мне повторить на java вызов команды cryptcp -sign и может быть есть подходящий пример?(причем как я понял -nochain и -norev можно не использовать)
cryptcp -sign -thumbprint 8a9257818d6439f41af3b2ecba5302b2364495ec -der -nochain -cert -norev "testXmlForSig.xml" "testXmlForSig.xml.sign"


ЗЫ: Кстати я пока писал понял что может быть еще причина в старых версиях библиотек которые используются у нас в проекте - может такое быть? (если что JCP.jar Release-Version: 2.0.44122-A)
Offline Евгений Афанасьев  
#2 Оставлено : 1 ноября 2023 г. 16:28:23(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Здравствуйте.
Приложите полученные подписи для сравнения.
Offline FedrBodr  
#3 Оставлено : 7 ноября 2023 г. 13:28:11(UTC)
FedrBodr

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

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

Приветсвую,

Результат с командной строки

Код:

0�	*�H��
��0�10
*�0�	*�H��
��$���<?xml version="1.0" encoding="windows-1251"?>
<product>
    <prequest>
        <req>
            <PersonReq>
                <first>�������</first>
                <birthDt>1973-04-24</birthDt>
                <placeOfBirth>���. ������ ����������� ����</placeOfBirth>
                <UserID>X101LL000007</UserID>
            </PersonReq>
            <RefReq>
                <product>CHIP</product>
            </RefReq>
            <IOType>B2B</IOType>
        </req>
    </prequest>
</product>���������0��0�-�o�e�<�8�CE�1���0
*�0��1 0	*�H��
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)0
230711060109Z
280711061109Z0��10	*�H��
	support@nbki.ru10	URU10UРегион10U
Город1 0U
ПАО Тестбанк10
U0101BB1)0'U Тестовый НБКИ - 20230f0*�0*�$�*�C�@�H**��Ŷb>jQ<�-"D.�c^d�g���9a<:�@��P�w|mu���j�����q�تט`wv���	0�0U��0Ul	ZO~W�?�R�KC�Z�S^04	+�7'0%*�2	���j���F�������1���0%U%0++*�
0��+��0��06+0�*http://ocsp.cryptopro.ru/ocsp2012/ocsp.srf0W+0�Khttp://cpca20.cryptopro.ru/aia/1d5c58c03feb4407cf888dafae5382bb778ed464.crt0+U$0"�20230711060108Z�20240711060108Z0��U��0��0N�L�J�Hhttp://cdp.cryptopro.ru/cdp/1d5c58c03feb4407cf888dafae5382bb778ed464.crl0Q�O�M�Khttp://cpca20.cryptopro.ru/cdp/1d5c58c03feb4407cf888dafae5382bb778ed464.crl0��U#��0��\X�?�Dψ���S��w��d������0��1 0	*�H��
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)��3���H�F���oM0
*�����<h)�
�TT���T��K��9��	��׃�Ph,����9uW�Z������?CÖ�L��b�7��K6<�J��ns��<͢AY��ñkء�UJq����fk�w	:"�1��m�����# ����1��0��0��0��1 0	*�H��
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)o�e�<�8�CE�1���0
*����0	*�H��
	1	*�H��
0	*�H��
	1
231107100903Z0/	*�H��
	1" |���Y��x�c�?�3X�g�	�z9����wp0�!*�H��
	/1�0�0�0�0
*� ��ׇ�!um��&�bw�/�k= 8�m��p��0��0�����0��1 0	*�H��
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)o�e�<�8�CE�1���0
*�@'̽��"���^�ހ�fXU`s�Cq<�K%�7i�h0��i�ÿ�-�/���Z�av��~��J�������



Результат с кода - вот тут - первые строки подписи похожи думаю корректное направление) с другими примерами была совсем подпись непохожа.
При этом не вижу контента исходного

Код:

0�	*�H��
��0�10*��0�	*�H��
����0��0�-�o�e�<�8�CE�1���0
*�0��1 0	*�H��
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)0
230711060109Z
280711061109Z0��10	*�H��
	support@nbki.ru10	URU10UРегион10U
Город1 0U
ПАО Тестбанк10
U0101BB1)0'U Тестовый НБКИ - 20230f0*�0*�$�*�C�@�H**��Ŷb>jQ<�-"D.�c^d�g���9a<:�@��P�w|mu���j�����q�تט`wv���	0�0U��0Ul	ZO~W�?�R�KC�Z�S^04	+�7'0%*�2	���j���F�������1���0%U%0++*�
0��+��0��06+0�*http://ocsp.cryptopro.ru/ocsp2012/ocsp.srf0W+0�Khttp://cpca20.cryptopro.ru/aia/1d5c58c03feb4407cf888dafae5382bb778ed464.crt0+U$0"�20230711060108Z�20240711060108Z0��U��0��0N�L�J�Hhttp://cdp.cryptopro.ru/cdp/1d5c58c03feb4407cf888dafae5382bb778ed464.crl0Q�O�M�Khttp://cpca20.cryptopro.ru/cdp/1d5c58c03feb4407cf888dafae5382bb778ed464.crl0��U#��0��\X�?�Dψ���S��w��d������0��1 0	*�H��
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)��3���H�F���oM0
*�����<h)�
�TT���T��K��9��	��׃�Ph,����9uW�Z������?CÖ�L��b�7��K6<�J��ns��<͢AY��ñkء�UJq����fk�w	:"�1��m�����# ����0��0�$��3���H�F���oM0
*�0��1 0	*�H��
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)0
210131183028Z
360131183028Z0��1 0	*�H��
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)0��0!*�0	*�*��������.5\4�jUʷ$I�a*��'P���>~�p9��0�xI�#�
7�2]�td:��Z������������
n��.�r,�*)%u��H�
v*J�T@P�fX�<fQ7B:�K`0��&Z�~�>�꼣������0��0U��0U\X�?�Dψ���S��w��d0U�0�0/U (0&0*�dq0*�dq0*�dq0U �0	+�7CA0	+�7�0	+�70*�.���0
*�����D���m�5(�6���@� �����#�aZ�:��j2y@&��}@���a�_&c=���fPn�_��z%�<�{?�L�yt۞�Rl��f/&��q�Ŗ��y�Dxw���s��ez-��&�������1��0��0��0��1 0	*�H��
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)o�e�<�8�CE�1���0*�����0	*�H��
	1	*�H��
0)	*�H��
	4100*���
*�0/	*�H��
	1" �E���I��>!�Xna�f���M�eF'0�!*�H��
	/1�0�0�0�0
*� ��ׇ�!um��&�bw�/�k= 8�m��p��0��0�����0��1 0	*�H��
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)o�e�<�8�CE�1���0
*�@`a#��ZǓ����%d
9qm�qRv5��~��'֪b9Sg�@S*@�-'t4/��3G��N�p���������
Offline a.shirokov  
#4 Оставлено : 8 ноября 2023 г. 12:15:40(UTC)
a.shirokov

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

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

Автор: Евгений Афанасьев Перейти к цитате
Здравствуйте.
Приложите полученные подписи для сравнения.


Подписи лучше всего анализировать с помощью специальных инструментов, погуглите ASN1 decoder online

Offline Евгений Афанасьев  
#5 Оставлено : 8 ноября 2023 г. 22:42:14(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Похоже, что подпись должна быть совмещенная.
1. У вас CAdESSignature(true) - это отделенная подпись.
2. cadesSignature.addSigner - лучше тут не задавать OID'ы, а оставить null либо использовать версию addSigner без OID'ов.
3. Вы пишете "//здесь возникает ошибка" - какая ошибка?

Отредактировано пользователем 8 ноября 2023 г. 22:44:11(UTC)  | Причина: Не указана

Offline FedrBodr  
#6 Оставлено : 10 ноября 2023 г. 15:41:31(UTC)
FedrBodr

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

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

ПРиветсвую

Цитата:
1. У вас CAdESSignature(true) - это отделенная подпись.

Поправил на CAdESSignature()

Цитата:
2. cadesSignature.addSigner - лучше тут не задавать OID'ы, а оставить null либо использовать версию addSigner без OID'ов.

Убрал в null

Цитата:
3. Вы пишете "//здесь возникает ошибка" - какая ошибка?

Прошу прощения за путанницу - это остаток копипаста - убрал)

В итоге подпись уже похожа, но таки отличается.

Вот код подписи котлин

Код:

fun sign(dataToSign: ByteArray, key: PrivateKey, cert: X509Certificate): ByteArray {
        val cadesSignature = CAdESSignature()  // совмещенная подпись
        val signerCertificateChain: List<X509Certificate> = listOf(cert)

        cadesSignature.addSigner(
            JCP.PROVIDER_NAME, // Имя провайдера, который будет использоваться для создания подписи.
            null, // JCP.GOST_DIGEST_NAME, // Идентификатор алгоритма хэширования, который будет использоваться для вычисления дайджеста (хэша) подписываемых данных.
            null, // JCP.GOST_EL_SIGN_NAME, //JCP.GOST_EL_SIGN_NAME, // Идентификатор алгоритма подписи, который будет использоваться для создания электронной подписи.
            key, // Приватный ключ подписанта.
            signerCertificateChain, // Цепочка сертификатов подписанта.
            CAdESType.CAdES_BES, // Тип CAdES подписи.
            null, // Адрес TSA службы.
            false, // Заверяющая ли подпись.
            null, // Таблица подписанных аттрибутов для добавления в подпись.
            null, // Таблица неподписанных аттрибутов для добавления в подпись.
            null, // CRL (списков отзыва сертификатов), связанных с подписью.
            true // Добавить ли цепочку подписанта в подпись.
        )

        val outSignatureStream = ByteArrayOutputStream()
        cadesSignature.open(outSignatureStream)

        // Передаем на подпись данные
        cadesSignature.update(dataToSign)
        cadesSignature.close()

        val signature = outSignatureStream.toByteArray()
        val encodedSignature = Encoder().encode(signature)

        File("/Users/fedrbodr/IdeaProjects/webBankir/crypto/.tmp/test-signed.xml2.sign").writeBytes(signature)
        File("/Users/fedrbodr/IdeaProjects/webBankir/crypto/.tmp/test-signed.xml3.sign").writeText(encodedSignature)

        return signature
    }


Вот результат подписи
Код:

0	*H
010*�0	*H
$<?xml version="1.0" encoding="windows-1251"?>
<product>
    <prequest>
        <req>
            <PersonReq>
                <first>Алексей</first>
                <birthDt>1973-04-24</birthDt>
                <placeOfBirth>Пос. Ванино Хабаровский край</placeOfBirth>
                <UserID>X101LL000007</UserID>
            </PersonReq>
            <RefReq>
                <product>CHIP</product>
            </RefReq>
            <IOType>B2B</IOType>
        </req>
    </prequest>
</product>������00-oe�<8CE10
*01 0	*H
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)0
230711060109Z
280711061109Z010	*H
	support@nbki.ru10	URU10UРегион10U
Город1 0U
ПАО Тестбанк10
U0101BB1)0'U Тестовый НБКИ - 20230f0*0*$�*C�@H**Ŷb>jQ<-"D.c^dg9a<:@Pw|mujqتט`wv	00U0Ul	ZO~W?RKCZS^04	+7'0%*2	jF1�0%U%0++*
0+006+0*http://ocsp.cryptopro.ru/ocsp2012/ocsp.srf0W+0Khttp://cpca20.cryptopro.ru/aia/1d5c58c03feb4407cf888dafae5382bb778ed464.crt0+U$0"20230711060108Z20240711060108Z0U00NLJHhttp://cdp.cryptopro.ru/cdp/1d5c58c03feb4407cf888dafae5382bb778ed464.crl0QOMKhttp://cpca20.cryptopro.ru/cdp/1d5c58c03feb4407cf888dafae5382bb778ed464.crl0U#0\X?DψSwd01 0	*H
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)3HFoM0
*�<h)
TTTK9	׃Ph,9uWZ?CÖLb7K6<Jns<͢AYñkءUJqfkw	:"1m# 00$3HFoM0
*01 0	*H
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)0
210131183028Z
360131183028Z01 0	*H
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)00!*0	**�.5\4jUʷ$Ia*'P>~p90xI#
72]td:Z�
n.r,*)%uH
v*JT@PfX<fQ7B:K`0&Z~>꼣00U0U\X?DψSwd0U00/U (0&0*dq0*dq0*dq0U �0	+7CA0	+7�0	+70*.���0
*�Dm5(6@ #aZ:j2y@&}@a_&c=fPn_z%<{?Lyt۞Rlf/&qŖyDxwsez-&��10001 0	*H
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)oe�<8CE10*�0	*H
	1	*H
0)	*H
	4100*�
*0/	*H
	1" EI>!XnafMeF'0!*H
	/10000
* ׇ!um&bw/k= 8mp0001 0	*H
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)oe�<8CE10
*@BGM6;<
j@8Pnz\NBqK")D'GW\
:������


И на всякий подпись которая была с командной стоки(эталонная)
Код:

0�	*�H��
��0�10
*�0�	*�H��
��$���<?xml version="1.0" encoding="windows-1251"?>
<product>
    <prequest>
        <req>
            <PersonReq>
                <first>�������</first>
                <birthDt>1973-04-24</birthDt>
                <placeOfBirth>���. ������ ����������� ����</placeOfBirth>
                <UserID>X101LL000007</UserID>
            </PersonReq>
            <RefReq>
                <product>CHIP</product>
            </RefReq>
            <IOType>B2B</IOType>
        </req>
    </prequest>
</product>���������0��0�-�o�e�<�8�CE�1���0
*�0��1 0	*�H��
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)0
230711060109Z
280711061109Z0��10	*�H��
	support@nbki.ru10	URU10UРегион10U
Город1 0U
ПАО Тестбанк10
U0101BB1)0'U Тестовый НБКИ - 20230f0*�0*�$�*�C�@�H**��Ŷb>jQ<�-"D.�c^d�g���9a<:�@��P�w|mu���j�����q�تט`wv���	0�0U��0Ul	ZO~W�?�R�KC�Z�S^04	+�7'0%*�2	���j���F�������1���0%U%0++*�
0��+��0��06+0�*http://ocsp.cryptopro.ru/ocsp2012/ocsp.srf0W+0�Khttp://cpca20.cryptopro.ru/aia/1d5c58c03feb4407cf888dafae5382bb778ed464.crt0+U$0"�20230711060108Z�20240711060108Z0��U��0��0N�L�J�Hhttp://cdp.cryptopro.ru/cdp/1d5c58c03feb4407cf888dafae5382bb778ed464.crl0Q�O�M�Khttp://cpca20.cryptopro.ru/cdp/1d5c58c03feb4407cf888dafae5382bb778ed464.crl0��U#��0��\X�?�Dψ���S��w��d������0��1 0	*�H��
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)��3���H�F���oM0
*�����<h)�
�TT���T��K��9��	��׃�Ph,����9uW�Z������?CÖ�L��b�7��K6<�J��ns��<͢AY��ñkء�UJq����fk�w	:"�1��m�����# ����1��0��0��0��1 0	*�H��
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)o�e�<�8�CE�1���0
*����0	*�H��
	1	*�H��
0	*�H��
	1
231110115450Z0/	*�H��
	1" |���Y��x�c�?�3X�g�	�z9����wp0�!*�H��
	/1�0�0�0�0
*� ��ׇ�!um��&�bw�/�k= 8�m��p��0��0�����0��1 0	*�H��
	cpca@cryptopro.ru10	URU10UМосква10UМосква1%0#U
ООО "КРИПТО-ПРО"110/U(УЦ КРИПТО-ПРО (ГОСТ 2012)o�e�<�8�CE�1���0
*�@γQ��U�,1��"���̮��!�w 5gX3IV}�U�k���@U<6kD��o�6i��^������


ОНа уже более похожа на резултат тулзы командной строки, но таки отличатся - в конце такое ощущение что у меня в коде 2 серта добавилось
А с командной строки 1 - но может это не принципиально для проверки подписи кстати)


Есть идеи куда копать? Может с параметрами еще можно поиграться или алгоритм явно указать другой


А вот подпись сама отличается на вид уже не сильно
[img=https://ibb.co/dm3Bj66]Сверху подпись командной строки, внизу подпись с kotlin кода[/img]

Отредактировано пользователем 10 ноября 2023 г. 15:48:57(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#7 Оставлено : 10 ноября 2023 г. 17:53:39(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Вы бы подписи прикрепили в виде файлов.
Последним параметром в addSigner вы указали добавить цепочку, поэтому добавилась цепочка (2 сертификата). Если нужно только сертификат подписи, то нужно до подписи использовать setCertificateStore с передачей ему Store с одним X509CertificateHolder, в котором нужный сертификат.
Offline FedrBodr  
#8 Оставлено : 13 декабря 2023 г. 18:12:07(UTC)
FedrBodr

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

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

Приветствую, благодарю за помощь, отложил задау потом нашел на форуме про добавление сертификатов в траст и локально заработало, и работает у коллеги)

Но во докере на тестовом стенде ругается ошибкой:

Код:
Root certificate: serial 317be3301c1ac17a948cf46a8c4f46f4d, subject CN=УЦ КРИПТО-ПРО (ГОСТ 2012), O="ООО \"КРИПТО-ПРО\"", L=Москва, ST=Москва, C=RU, EMAILADDRESS=cpca@cryptopro.ru, issuer CN=УЦ КРИПТО-ПРО (ГОСТ 2012), O="ООО \"КРИПТО-ПРО\"", L=Москва, ST=Москва, C=RU, EMAILADDRESS=cpca@cryptopro.ru, not before Sun Jan 31 21:30:28 MSK 2021, not after Thu Jan 31 21:30:28 MSK 2036 is untrusted; error codes: [32] 'Root certificate is in the certificate chain but not in cacerts', 
	at ru.CryptoPro.CAdES.cl_1.addSigner(Unknown Source)
	at com.webbankir.crypto.main.verticles.VerticleSign$signPKCS7$2.invoke(VerticleSign.kt:253)
	at com.webbankir.crypto.main.verticles.VerticleSign$signPKCS7$2.invoke(VerticleSign.kt:209)
	at io.vertx.kotlin.coroutines.VertxCoroutineKt$awaitBlocking$2.invoke$lambda$0(VertxCoroutine.kt:113)
	at io.vertx.core.impl.ContextBase.lambda$null$0(ContextBase.java:137)
	at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:264)
	at io.vertx.core.impl.ContextBase.lambda$executeBlocking$1(ContextBase.java:135)
	at io.vertx.core.impl.TaskQueue.run(TaskQueue.java:76)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: Root certificate: serial 317be3301c1ac17a948cf46a8c4f46f4d, subject CN=УЦ КРИПТО-ПРО (ГОСТ 2012), O="ООО \"КРИПТО-ПРО\"", L=Москва, ST=Москва, C=RU, EMAILADDRESS=cpca@cryptopro.ru, issuer CN=УЦ КРИПТО-ПРО (ГОСТ 2012), O="ООО \"КРИПТО-ПРО\"", L=Москва, ST=Москва, C=RU, EMAILADDRESS=cpca@cryptopro.ru, not before Sun Jan 31 21:30:28 MSK 2021, not after Thu Jan 31 21:30:28 MSK 2036 is untrusted; error codes: [32] 'Root certificate is in the certificate chain but not in cacerts', 
	at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.validateIfRootCertificateInTrustStoreAndAddToChain(Unknown Source)
	at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build(Unknown Source)
	at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build(Unknown Source)



У меня есть .pfx и .cer. cer для подписи использую а вот с .pfx брал цепочку сертификатов чтоб положить в cacerts

ТАк как ошибка была про то что корневой сертификат не добавлен в cacerts
Я добавл все сертификаты которые есть в .pfx в доверенные keytool-ом

Код:

fun loadToTrustAllCertsFromPfx() {
        logger.info("Start extract certs from pfx")
        val cerFilePath = getResourcePath("/testbk2023.pfx")

        val keystorePassword = "111".toCharArray() // replace with actual password
        val fis = FileInputStream(cerFilePath)

        val keyStore = KeyStore.getInstance("PKCS12")
        keyStore.load(fis, keystorePassword)
        fis.close()

        val aliases = keyStore.aliases()
        val certNamesForTrusted = mutableListOf<String>()

        while (aliases.hasMoreElements()) {
            val alias = aliases.nextElement()

            // If the alias refers to a key pair, print the certificate
            if (keyStore.isKeyEntry(alias)) {
                // Get the certificate chain
                val chain = keyStore.getCertificateChain(alias)

                chain.forEachIndexed { index, certificate ->
                    val certName = "$alias-$index.crt"
                    // Write each certificate to a separate file
                    FileOutputStream("$alias-$index.crt").use { fos ->
                        fos.write(certificate.encoded)
                    }
                    certNamesForTrusted.add(certName)
                }
            }
        }

        var file = File("jssecacerts")
        if (!file.isFile()) {
            val SEP = File.separatorChar
            val dir = File(System.getProperty("java.home") + SEP + "lib" + SEP + "security")
            file = File(dir, "jssecacerts")
            if (!file.isFile()) {
                file = File(dir, "cacerts")
            }
        }
        val keystorePath = file.absolutePath

        for (certName in certNamesForTrusted) {
            val cerFilePath = File(certName).absolutePath
            val keytoolProcess = keytoolImport(keystorePath, cerFilePath, certName)

            keytoolProcess.waitFor()
        }
        logger.info("Success put nbki root into trusted")
    }

    private fun keytoolImport(keystorePath: String?, cerFilePath: String?, alias: String): Process {
        val keytoolProcess = ProcessBuilder(
            "keytool", "-import", "-trustcacerts", "-alias", alias,
            "-keystore", keystorePath,
            "-file", cerFilePath,
            "-storepass", "changeit"
        ).apply {
            inheritIO()
        }.start()
        return keytoolProcess
    }


+ добавил параметров (тоже по форуму видел рекомендации)
System.setProperty("com.sun.security.enableCRLDP", "true")
System.setProperty("com.ibm.security.enableCRLDP", "true")
System.setProperty("com.sun.security.enableAIAcaIssuers", "true");
System.setProperty("ru.CryptoPro.reprov.enableAIAcaIssuers", "true");

И в логах нет сообщений об ошибках - как буд-то все ок добавилось но всеравно при подписании ошибка выше.
Не пойму куда копать,
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (3)
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.