Статус: Активный участник
Группы: Участники
Зарегистрирован: 28.12.2021(UTC) Сообщений: 253 Откуда: Новосибирск Сказал(а) «Спасибо»: 77 раз Поблагодарили: 1 раз в 1 постах
|
Есть файл с присоединённой подписью (на сколько я понимаю без сертификатов, делал по примеру в CADES).
MIAGCSqGSIb3DQEHAqCAMIACAQExDjAMBggqhQMHAQECAgUAMIAGCSqGSIb3DQEHAaCAJIAEDGZpbGUgY29udGVudAAAAAAAADGCA+YwggPiAgEBMIIBVTCCAT4xFTATBgUqhQNkBBIKNzcwNzMyOTE1MjEcMBoGCSqGSIb3DQEJARYNdWNAdGF4Lmdvdi5ydTEYMBYGBSqFA2QBEg0xMDQ3NzA3MDMwNTEzMQswCQYDVQQGEwJSVTEYMBYGA1UECAwPNzcg0JzQvtGB0LrQstCwMRkwFwYDVQQHDBDQsy4g0JzQvtGB0LrQstCwMSkwJwYDVQQJDCDRg9C7LiDQndC10LPQu9C40L3QvdCw0Y8sINC0LiAyMzE/MD0GA1UECgw20KTQtdC00LXRgNCw0LvRjNC90LDRjyDQvdCw0LvQvtCz0L7QstCw0Y8g0YHQu9GD0LbQsdCwMT8wPQYDVQQDDDbQpNC10LTQtdGA0LDQu9GM0L3QsNGPINC90LDQu9C+0LPQvtCy0LDRjyDRgdC70YPQttCx0LACEQKICkcAurBvgkeunCDfCUgSMAwGCCqFAwcBAQICBQCgggImMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwKQYJKoZIhvcNAQk0MRwwGjAMBggqhQMHAQECAgUAoQoGCCqFAwcBAQEBMC8GCSqGSIb3DQEJBDEiBCDCdiMl6R18zx2Yv/t0iEEjWSuegRhUbf6z82zveTdiBjCCAawGCyqGSIb3DQEJEAIvMYIBmzCCAZcwggGTMIIBjzAKBggqhQMHAQECAgQgL63+zSRIXj9hQKjNFlUdWlF4tKV6jsrSlAUQc17E5Y4wggFdMIIBRqSCAUIwggE+MRUwEwYFKoUDZAQSCjc3MDczMjkxNTIxHDAaBgkqhkiG9w0BCQEWDXVjQHRheC5nb3YucnUxGDAWBgUqhQNkARINMTA0NzcwNzAzMDUxMzELMAkGA1UEBhMCUlUxGDAWBgNVBAgMDzc3INCc0L7RgdC60LLQsDEZMBcGA1UEBwwQ0LMuINCc0L7RgdC60LLQsDEpMCcGA1UECQwg0YPQuy4g0J3QtdCz0LvQuNC90L3QsNGPLCDQtC4gMjMxPzA9BgNVBAoMNtCk0LXQtNC10YDQsNC70YzQvdCw0Y8g0L3QsNC70L7Qs9C+0LLQsNGPINGB0LvRg9C20LHQsDE/MD0GA1UEAww20KTQtdC00LXRgNCw0LvRjNC90LDRjyDQvdCw0LvQvtCz0L7QstCw0Y8g0YHQu9GD0LbQsdCwAhECiApHALqwb4JHrpwg3wlIEjAKBggqhQMHAQEBAQRAXZ+qj3ufrfW2qHP2gHb0h3PV1StiGJjDW2Y55Hn0rRF3wRbiDtIwaZcohEJQy6KcHGAGkpWsqnZiZzSZY3JzXAAAAAAAAA==
При проверке ругается Цитата:Certificate: sn 2880a4700bab06f8247ae9c20df094812 issued by GeneralNames:\n 4: 1.2.643.100.4=7707329152,E=uc@tax.gov.ru,1.2.643.100.1=1047707030513,C=RU,ST=77 Москва,L=г. Москва,STREET=ул. Неглинная\\, д. 23,O=Федеральная налоговая служба,CN=Федеральная налоговая служба\n not found; error codes: [13] 'Certificate not found in the certificate list я так понимаю, потому что я в проверку передал null судя по сообщению хочет сертификат налоговой Код:
CAdESSignature cadesToVerify = new CAdESSignature(Base64.decode(fileContent),null,null);
cadesToVerify.verify(null);
что нужно передать, чтобы отработало? в аналоге на PHP в VerifyCades ничего кроме тела не передавал - всё работало в примере на сколько я понял если сертификатов нет, то цепочка вот так отдаётся new HashSet<X509Certificate>(config.getChain()) сеттера не нашел config.setChain() - не понятно что там в конфиге и как получают получить цепочку из присоединённой подписи, по ней вытащить из хранилища сертификаты и передать в проверку? так что-ли?! Отредактировано пользователем 6 декабря 2024 г. 9:19:49(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,997 Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 712 раз в 673 постах
|
Здравствуйте. "в аналоге на PHP в VerifyCades ничего кроме тела не передавал - всё работало" - это другая реализация, возможно, плагин ищет сертификаты в хранилище My. Т.к. в подписи нет сертификата для ее проверки, то его надо передать извне, например, с помощью verify. Если подпись формируется с помощью CAdESSignature, то добавить любые сертификаты (например, сертификат подписи) можно с помощью CAdESSignature#setCertificateStore (принимает список X509CertificateHolder), а конкретно цепочку - с помощью параметра addCertificateChain одного из методов CAdESSignature#addSigner (цепочка добавится целиком в ходе создания подписи). |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 28.12.2021(UTC) Сообщений: 253 Откуда: Новосибирск Сказал(а) «Спасибо»: 77 раз Поблагодарили: 1 раз в 1 постах
|
Автор: Евгений Афанасьев Здравствуйте. "в аналоге на PHP в VerifyCades ничего кроме тела не передавал - всё работало" - это другая реализация, возможно, плагин ищет сертификаты в хранилище My. Т.к. в подписи нет сертификата для ее проверки, то его надо передать извне, например, с помощью verify. Если подпись формируется с помощью CAdESSignature, то добавить любые сертификаты (например, сертификат подписи) можно с помощью CAdESSignature#setCertificateStore (принимает список X509CertificateHolder), а конкретно цепочку - с помощью параметра addCertificateChain одного из методов CAdESSignature#addSigner (цепочка добавится целиком в ходе создания подписи). 1. Как понять есть ли в подписи сертификаты для её проверки? (файл с присоединённой подписью выше под спойлером) 2. Да подпись формируется с помощью CAdESSignature. Судя по ошибке он "потерял" сертификат ИФНС. Чтобы эту цепочку передать, её сначала нужно получить - как? судя по коду примера Код: cadesSignature.verify(
signatureType.equals(SignatureType.ST_CADES_X_LONG_TYPE_1) ||
signatureType.equals(SignatureType.ST_CADES_A)
? Collections.<X509Certificate>emptySet()
: ( config.getCertificateStore() != null ? null : new HashSet<X509Certificate>(config.getChain()) ),
( config.getCRLStore() != null ? null : config.getCRLs() )
);
в verify() передаётся цепочка в таком формате new HashSet<X509Certificate>(config.getChain()) а вот как в конфиг она попадает - вопрос, сеттера я не нашел, но нашел метод loadConfiguration() где на Служебном классе Container2012_256 уже в конец потерял нить :(
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 28.12.2021(UTC) Сообщений: 253 Откуда: Новосибирск Сказал(а) «Спасибо»: 77 раз Поблагодарили: 1 раз в 1 постах
|
млин, как то всё очень сложно :( задача вроде простоая - есть файл с подписью (либо исходный файл + подпись), как получить из неё данные? по идее "скормить" данные файла методу verify() и всё! Код:
CAdESSignature cadesToVerify = new CAdESSignature(Base64.decode(fileContent),null,null);
cadesToVerify.verify(null);
и на php именно так и работает тут же всё не просто почему то на verify(null) ошибка, какие то сертификаты ещё нужно передавать? где их брать? ... Отредактировано пользователем 6 декабря 2024 г. 11:14:14(UTC)
| Причина: Не указана
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 28.12.2021(UTC) Сообщений: 253 Откуда: Новосибирск Сказал(а) «Спасибо»: 77 раз Поблагодарили: 1 раз в 1 постах
|
подметил ещё такой момент - на PHP я для проверки и получения данных ЭЦП использовал метод VerifyCades() объекта класса CPSignedData
а тут CAdESSignature.verify()
может не то использую? хотя в примере именно так
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 28.12.2021(UTC) Сообщений: 253 Откуда: Новосибирск Сказал(а) «Спасибо»: 77 раз Поблагодарили: 1 раз в 1 постах
|
как попонять - ошибка "Certificate not found in the certificate list" говорит о том, что я в коде, что то не так делаю? или просто снова что-то в cacets надо импортировать?
уже в конец запутался :(
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 28.12.2021(UTC) Сообщений: 253 Откуда: Новосибирск Сказал(а) «Спасибо»: 77 раз Поблагодарили: 1 раз в 1 постах
|
Код:
// Цепочка сертификатов подписи.
List<X509Certificate> chain = ...;
// Сертификаты для проверки подписи.
Set<X509Certificate> certs = ...;
кусочек из документации, по проверке подписи никак не могу понять - как их получить? вот есть файл с присоединённой подписью - на этом всё! как его проверить и получить данные подписанта? с ГУИ КриптоПро это всё делается без проблем ... теперь кусочек из примера, класс Configuration метод loadConfiguration возвращает PrivateKey, но тут же получает и устанавливает цепочку! (no comment) Код:
// Получаем цепочку сертификатов.
List<Certificate> lChain =
Arrays.asList(keyStore.getCertificateChain(alias));
// Конвертируем цепочку в X509Certificate.
Collection<X509Certificate> xChain =
Arrays.asList((lChain).toArray(new X509Certificate[lChain.size()]));
chain.addAll(xChain);
но и тут мне непонятно - что тут за alias, где его брать ? в описании параметров метода "@param alias Идентификатор ключа." не пойму - о каком ключе речь? у меня на входе сингатура подписи и всё, какой ключ мне нужно использовать? может у меня вообще никаких ключей нет - мне просто нужно проверить подпись ... копаем далее - параметром в этот метод передаётся container.getAlias() Отредактировано пользователем 7 декабря 2024 г. 3:46:18(UTC)
| Причина: Не указана
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 28.12.2021(UTC) Сообщений: 253 Откуда: Новосибирск Сказал(а) «Спасибо»: 77 раз Поблагодарили: 1 раз в 1 постах
|
Автор: GTAlex Код:
// Цепочка сертификатов подписи.
List<X509Certificate> chain = ...;
// Сертификаты для проверки подписи.
Set<X509Certificate> certs = ...;
кусочек из документации, по проверке подписи никак не могу понять - как их получить? вот есть файл с присоединённой подписью - на этом всё! как его проверить и получить данные подписанта? с ГУИ КриптоПро это всё делается без проблем ... теперь кусочек из примера, класс Configuration метод loadConfiguration возвращает PrivateKey, но тут же получает и устанавливает цепочку! (no comment) Код:
// Получаем цепочку сертификатов.
List<Certificate> lChain =
Arrays.asList(keyStore.getCertificateChain(alias));
// Конвертируем цепочку в X509Certificate.
Collection<X509Certificate> xChain =
Arrays.asList((lChain).toArray(new X509Certificate[lChain.size()]));
chain.addAll(xChain);
но и тут мне непонятно - что тут за alias, где его брать ? в описании параметров метода "@param alias Идентификатор ключа." не пойму - о каком ключе речь? у меня на входе сингатура подписи и всё, какой ключ мне нужно использовать? может у меня вообще никаких ключей нет - мне просто нужно проверить подпись ... копаем далее - параметром в этот метод передаётся container.getAlias() IDE говорит, что это одна из 16 имплементаций Служебного интерфейса ISignatureContainer (млин, это ещё что?!) ну и если я правильно расковырял, то изначально контейнер задаётся new Container2012_256() а алияс соответственно таким геттером Код:
public String getAlias() {
return "unixCadesTestCerts2012-Usr256";
}
при подписании я тоже использовал загрузку цепочки keyStore.getCertificateChain(alias) но при подписании alias - это айди ключевого контейнера, которым я подписываю документ а тут то что?! Отредактировано пользователем 7 декабря 2024 г. 4:24:56(UTC)
| Причина: Не указана
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 28.12.2021(UTC) Сообщений: 253 Откуда: Новосибирск Сказал(а) «Спасибо»: 77 раз Поблагодарили: 1 раз в 1 постах
|
ради интереса - подпихнул те же данные, что и при подписании верификация прошла Код:
KeyStore keyStore = KeyStore.getInstance("RutokenStore", "JCP");
keyStore.load(null, null);
// Получаем цепочку сертификатов.
List<Certificate> lChain = Arrays.asList(keyStore.getCertificate("3e428a1c-af93-451d-a456-9889564df7c1"));
// Конвертируем цепочку в X509Certificate.
Collection<X509Certificate> xChain =
Arrays.asList((lChain).toArray(new X509Certificate[lChain.size()]));
Collection<X509Certificate> chain = new ArrayList<>(List.of());
chain.addAll(xChain);
CAdESSignature cadesToVerify = new CAdESSignature(Base64.decode(fileContent),null,null);
cadesToVerify.verify(new HashSet<>(chain));
ну это же совсем не то, что нужно а если мне нужно верифицировать сторонний файл с подписью, от которого у меня нет контейнера?!
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close