Статус: Участник
Группы: Участники
Зарегистрирован: 17.06.2020(UTC) Сообщений: 23
Сказал(а) «Спасибо»: 2 раз
|
Здравствуйте! Возник вопрос по поводу сертификатов в CAdESSignature
для этой подписи можно задать сертификаты с помощью setCertificateStore и также добавить сертификат в addSigner Как я понимаю с помощью двух этих параметров для подписанта создается цепочка. То есть в setCertificateStore нужно передавать корневые УЦ а для подписанта его личный? Если так, то откуда берутся сертификаты если не передавать их в setCertificateStore? Будут ли они браться с cacerts и из андроидного AndroidCACerts? или эти сертификаты в любом случае будут использоваться для проверки?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Здравствуйте. С помощью setCertificateStore можно добавить в подпись любые сертификаты. С помощью параметра addCertificateChain в addSigner можно добавить построенную цепочку сертификатов подписанта в подпись. Нужные корневые сертификаты должны быть либо установлены в security/cacerts внутри приложения (файл создается при инициализации CSPConfig.init и содержит порядка 30 корневых сертификатов, cacerts - хранилище формата BKS с паролем changeit, в ACSPClientApp есть пример работы с ним), либо руками в хранилище доверенных сертификатов пользователя в устройстве: ориентировочно "Настройки->Безопасность->Доверенные сертификаты" (т.е. AndroidCAStore). CAdES/XAdES ищет корневые и в cacerts, и в AndroidCAStore. Отредактировано пользователем 16 сентября 2020 г. 11:23:10(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 17.06.2020(UTC) Сообщений: 23
Сказал(а) «Спасибо»: 2 раз
|
Автор: Евгений Афанасьев Здравствуйте. С помощью setCertificateStore можно добавить в подпись любые сертификаты. С помощью параметра addCertificateChain в addSigner можно добавить построенную цепочку сертификатов подписанта в подпись. Нужные корневые сертификаты должны быть либо установлены в security/cacerts внутри приложения (файл создается при инициализации CSPConfig.init и содержит порядка 30 корневых сертификатов, cacerts - хранилище формата BKS с паролем changeit, в ACSPClientApp есть пример работы с ним), либо руками в хранилище доверенных сертификатов пользователя в устройстве: ориентировочно "Настройки->Безопасность->Доверенные сертификаты" (т.е. AndroidCAStore). CAdES/XAdES ищет корневые и в cacerts, и в AndroidCAStore. То есть возможности поменять сторы для проверки подписи нет? Какая практическая ценность добавления любых сертификатов? Для подписанта я представляю а вот вообще любых не совсем
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Автор: Илья Кузьмин То есть возможности поменять сторы для проверки подписи нет? Да. Аналогично компоненты CSP CAdES-подписи используют фиксированные ROOT, CA, MY. Автор: Илья Кузьмин Какая практическая ценность добавления любых сертификатов? Эта функция появилась раньше параметра для включения цепочки в подпись. Например, вам надо добавить промежуточные сертификаты, или сертификаты для службы штампов. Отредактировано пользователем 16 сентября 2020 г. 13:46:17(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 17.06.2020(UTC) Сообщений: 23
Сказал(а) «Спасибо»: 2 раз
|
Автор: Евгений Афанасьев Автор: Илья Кузьмин То есть возможности поменять сторы для проверки подписи нет? Да. Аналогично компоненты CSP CAdES-подписи используют фиксированные ROOT, CA, MY. Автор: Илья Кузьмин Какая практическая ценность добавления любых сертификатов? Эта функция появилась раньше параметра для включения цепочки в подпись. Например, вам надо добавить промежуточные сертификаты, или сертификаты для службы штампов. А если не добавлять промежуточные сертификаты или сертификаты служб штампов то что будет использоваться для проверки?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Вообще, для проверки подписи используются сертификаты: * из подписи (если есть) * из verify(<certs>) метода (если их туда передали) * из хранилища доверенных корневых сертификатов (cacerts и AndroidCAStore) с разделением на корневые и другие. Если подпись - X Long Type 1, то полный комплект сертификатов будет в атрибутах подписи. Отредактировано пользователем 16 сентября 2020 г. 14:46:46(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 17.06.2020(UTC) Сообщений: 23
Сказал(а) «Спасибо»: 2 раз
|
Возникла проблема небольшая с CADES.Почему то при проверке подписи у подписанта пустой сертификат Так мы создаем подпись Цитата: val cAdESSignature = CAdESSignature(true) cAdESSignature.addSigner(JCSP.PROVIDER_NAME, null, null, keys[0], certificates.toList(), CAdESType.CAdES_BES, null, false) val signatureStream = ByteArrayOutputStream() cAdESSignature.open(signatureStream) cAdESSignature.update(data) cAdESSignature.close() signatureStream.close() return signatureStream.toByteArray() А так берем сертификаты Цитата: val cAdESSignature = CAdESSignature(cms, null, CAdESType.CAdES_BES) return listOf(cAdESSignature.getCAdESSignerInfo(0).signerCertificate) Я посмотрел ASN который создается при этом, вроде там сертификат есть внутри Цитата: SEQUENCE { 261 9: OBJECT IDENTIFIER messageDigest (1 2 840 113549 1 9 4) : (PKCS #9) 272 34: SET { 274 32: OCTET STRING : 37 70 9E 7B 91 18 F4 63 96 14 F7 3B B9 A9 8E 6F : 77 A7 DB 2F 0F B1 0D D3 FA C6 40 CF 26 AC 94 90 : } : } 308 230: SEQUENCE { 311 11: OBJECT IDENTIFIER : signingCertificateV2 (1 2 840 113549 1 9 16 2 47) : (S/MIME Authenticated Attributes) 324 214: SET { 327 211: SEQUENCE { 330 208: SEQUENCE { 333 205: SEQUENCE { 336 10: SEQUENCE { 338 8: OBJECT IDENTIFIER '1 2 643 7 1 1 2 2' : } 348 32: OCTET STRING : 21 71 1B 3D AE 55 EE 56 45 AF C2 55 0C AD DE 41 : C5 72 A5 7E 95 F5 5A 4D 05 77 D5 03 AC 9C D2 1F 382 156: SEQUENCE { 385 132: SEQUENCE { 388 129: [4] { 391 127: SEQUENCE { 393 35: SET { 395 33: SEQUENCE { 397 9: OBJECT IDENTIFIER : emailAddress (1 2 840 113549 1 9 1) : (PKCS #9. Deprecated, use an altName extension instead) 408 20: IA5String 'support@cryptopro.ru' : } : } 430 11: SET { 432 9: SEQUENCE { 434 3: OBJECT IDENTIFIER : countryName (2 5 4 6) : (X.520 DN component) 439 2: PrintableString 'RU' : } : } 443 15: SET { 445 13: SEQUENCE { 447 3: OBJECT IDENTIFIER : localityName (2 5 4 7) : (X.520 DN component) 452 6: PrintableString 'Moscow' : } : } 460 23: SET { 462 21: SEQUENCE { 464 3: OBJECT IDENTIFIER : organizationName (2 5 4 10) : (X.520 DN component) 469 14: PrintableString 'CRYPTO-PRO LLC' : } : } 485 33: SET { 487 31: SEQUENCE { 489 3: OBJECT IDENTIFIER : commonName (2 5 4 3) : (X.520 DN component) 494 24: PrintableString 'CRYPTO-PRO Test Center 2' : } : } : } : } : } 520 19: INTEGER : 12 00 49 DC 92 06 1E D7 9F 34 B1 C0 CF 00 01 00 : 49 DC 92 : } : } : } : } : } : } : } 541 10: SEQUENCE { 543 8: OBJECT IDENTIFIER '1 2 643 7 1 1 1 1' : } 553 64: OCTET STRING : E0 F1 1C C4 C4 75 87 53 B1 A1 77 3B F1 59 DB 18 : DB 8D 55 32 46 BA 1F A2 AB 95 94 C8 71 41 56 54 : D7 0C 04 E8 E2 65 37 D2 DE 88 24 7D 2C CB A0 4B : B4 9A 93 C2 AB F8 3C 00 73 7E 08 CD 01 23 C2 27 : } : } : } : } Подскажите, в чем может быть проблема?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 17.06.2020(UTC) Сообщений: 23
Сказал(а) «Спасибо»: 2 раз
|
Автор: Илья Кузьмин Возникла проблема небольшая с CADES.Почему то при проверке подписи у подписанта пустой сертификат Так мы создаем подпись Цитата: val cAdESSignature = CAdESSignature(true) cAdESSignature.addSigner(JCSP.PROVIDER_NAME, null, null, keys[0], certificates.toList(), CAdESType.CAdES_BES, null, false) val signatureStream = ByteArrayOutputStream() cAdESSignature.open(signatureStream) cAdESSignature.update(data) cAdESSignature.close() signatureStream.close() return signatureStream.toByteArray() А так берем сертификаты Цитата: val cAdESSignature = CAdESSignature(cms, null, CAdESType.CAdES_BES) return listOf(cAdESSignature.getCAdESSignerInfo(0).signerCertificate) Я посмотрел ASN который создается при этом, вроде там сертификат есть внутри Цитата: SEQUENCE { 261 9: OBJECT IDENTIFIER messageDigest (1 2 840 113549 1 9 4) : (PKCS #9) 272 34: SET { 274 32: OCTET STRING : 37 70 9E 7B 91 18 F4 63 96 14 F7 3B B9 A9 8E 6F : 77 A7 DB 2F 0F B1 0D D3 FA C6 40 CF 26 AC 94 90 : } : } 308 230: SEQUENCE { 311 11: OBJECT IDENTIFIER : signingCertificateV2 (1 2 840 113549 1 9 16 2 47) : (S/MIME Authenticated Attributes) 324 214: SET { 327 211: SEQUENCE { 330 208: SEQUENCE { 333 205: SEQUENCE { 336 10: SEQUENCE { 338 8: OBJECT IDENTIFIER '1 2 643 7 1 1 2 2' : } 348 32: OCTET STRING : 21 71 1B 3D AE 55 EE 56 45 AF C2 55 0C AD DE 41 : C5 72 A5 7E 95 F5 5A 4D 05 77 D5 03 AC 9C D2 1F 382 156: SEQUENCE { 385 132: SEQUENCE { 388 129: [4] { 391 127: SEQUENCE { 393 35: SET { 395 33: SEQUENCE { 397 9: OBJECT IDENTIFIER : emailAddress (1 2 840 113549 1 9 1) : (PKCS #9. Deprecated, use an altName extension instead) 408 20: IA5String 'support@cryptopro.ru' : } : } 430 11: SET { 432 9: SEQUENCE { 434 3: OBJECT IDENTIFIER : countryName (2 5 4 6) : (X.520 DN component) 439 2: PrintableString 'RU' : } : } 443 15: SET { 445 13: SEQUENCE { 447 3: OBJECT IDENTIFIER : localityName (2 5 4 7) : (X.520 DN component) 452 6: PrintableString 'Moscow' : } : } 460 23: SET { 462 21: SEQUENCE { 464 3: OBJECT IDENTIFIER : organizationName (2 5 4 10) : (X.520 DN component) 469 14: PrintableString 'CRYPTO-PRO LLC' : } : } 485 33: SET { 487 31: SEQUENCE { 489 3: OBJECT IDENTIFIER : commonName (2 5 4 3) : (X.520 DN component) 494 24: PrintableString 'CRYPTO-PRO Test Center 2' : } : } : } : } : } 520 19: INTEGER : 12 00 49 DC 92 06 1E D7 9F 34 B1 C0 CF 00 01 00 : 49 DC 92 : } : } : } : } : } : } : } 541 10: SEQUENCE { 543 8: OBJECT IDENTIFIER '1 2 643 7 1 1 1 1' : } 553 64: OCTET STRING : E0 F1 1C C4 C4 75 87 53 B1 A1 77 3B F1 59 DB 18 : DB 8D 55 32 46 BA 1F A2 AB 95 94 C8 71 41 56 54 : D7 0C 04 E8 E2 65 37 D2 DE 88 24 7D 2C CB A0 4B : B4 9A 93 C2 AB F8 3C 00 73 7E 08 CD 01 23 C2 27 : } : } : } : } Подскажите, в чем может быть проблема? Хотя я ошибся, там сертификата нет, хотя добавляется
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 17.06.2020(UTC) Сообщений: 23
Сказал(а) «Спасибо»: 2 раз
|
Автор: Илья Кузьмин Автор: Илья Кузьмин Возникла проблема небольшая с CADES.Почему то при проверке подписи у подписанта пустой сертификат Так мы создаем подпись Цитата: val cAdESSignature = CAdESSignature(true) cAdESSignature.addSigner(JCSP.PROVIDER_NAME, null, null, keys[0], certificates.toList(), CAdESType.CAdES_BES, null, false) val signatureStream = ByteArrayOutputStream() cAdESSignature.open(signatureStream) cAdESSignature.update(data) cAdESSignature.close() signatureStream.close() return signatureStream.toByteArray() А так берем сертификаты Цитата: val cAdESSignature = CAdESSignature(cms, null, CAdESType.CAdES_BES) return listOf(cAdESSignature.getCAdESSignerInfo(0).signerCertificate) Я посмотрел ASN который создается при этом, вроде там сертификат есть внутри Цитата: SEQUENCE { 261 9: OBJECT IDENTIFIER messageDigest (1 2 840 113549 1 9 4) : (PKCS #9) 272 34: SET { 274 32: OCTET STRING : 37 70 9E 7B 91 18 F4 63 96 14 F7 3B B9 A9 8E 6F : 77 A7 DB 2F 0F B1 0D D3 FA C6 40 CF 26 AC 94 90 : } : } 308 230: SEQUENCE { 311 11: OBJECT IDENTIFIER : signingCertificateV2 (1 2 840 113549 1 9 16 2 47) : (S/MIME Authenticated Attributes) 324 214: SET { 327 211: SEQUENCE { 330 208: SEQUENCE { 333 205: SEQUENCE { 336 10: SEQUENCE { 338 8: OBJECT IDENTIFIER '1 2 643 7 1 1 2 2' : } 348 32: OCTET STRING : 21 71 1B 3D AE 55 EE 56 45 AF C2 55 0C AD DE 41 : C5 72 A5 7E 95 F5 5A 4D 05 77 D5 03 AC 9C D2 1F 382 156: SEQUENCE { 385 132: SEQUENCE { 388 129: [4] { 391 127: SEQUENCE { 393 35: SET { 395 33: SEQUENCE { 397 9: OBJECT IDENTIFIER : emailAddress (1 2 840 113549 1 9 1) : (PKCS #9. Deprecated, use an altName extension instead) 408 20: IA5String 'support@cryptopro.ru' : } : } 430 11: SET { 432 9: SEQUENCE { 434 3: OBJECT IDENTIFIER : countryName (2 5 4 6) : (X.520 DN component) 439 2: PrintableString 'RU' : } : } 443 15: SET { 445 13: SEQUENCE { 447 3: OBJECT IDENTIFIER : localityName (2 5 4 7) : (X.520 DN component) 452 6: PrintableString 'Moscow' : } : } 460 23: SET { 462 21: SEQUENCE { 464 3: OBJECT IDENTIFIER : organizationName (2 5 4 10) : (X.520 DN component) 469 14: PrintableString 'CRYPTO-PRO LLC' : } : } 485 33: SET { 487 31: SEQUENCE { 489 3: OBJECT IDENTIFIER : commonName (2 5 4 3) : (X.520 DN component) 494 24: PrintableString 'CRYPTO-PRO Test Center 2' : } : } : } : } : } 520 19: INTEGER : 12 00 49 DC 92 06 1E D7 9F 34 B1 C0 CF 00 01 00 : 49 DC 92 : } : } : } : } : } : } : } 541 10: SEQUENCE { 543 8: OBJECT IDENTIFIER '1 2 643 7 1 1 1 1' : } 553 64: OCTET STRING : E0 F1 1C C4 C4 75 87 53 B1 A1 77 3B F1 59 DB 18 : DB 8D 55 32 46 BA 1F A2 AB 95 94 C8 71 41 56 54 : D7 0C 04 E8 E2 65 37 D2 DE 88 24 7D 2C CB A0 4B : B4 9A 93 C2 AB F8 3C 00 73 7E 08 CD 01 23 C2 27 : } : } : } : } Подскажите, в чем может быть проблема? Хотя я ошибся, там сертификата нет, хотя добавляется Я увидел проблему, кажется нужно было поменять провайдер на JCP. Но после этой замены я начал получать ещё более странную ошибку Цитата: val cAdESSignature = CAdESSignature(true) cAdESSignature.addSigner(JCP.PROVIDER_NAME, keys[0], certificates, CAdESType.CAdES_BES, null, false) val signatureStream = ByteArrayOutputStream() cAdESSignature.open(signatureStream) cAdESSignature.update(data) cAdESSignature.close() Ошибка Цитата:W/JCP: ru.CryptoPro.JCP.Sign.cl_0.engineSign :: Unsupported method. java.security.SignatureException: Unsupported method. at ru.CryptoPro.JCSP.Key.AbstractKeySpec.signature(Unknown Source:4) at ru.CryptoPro.JCP.Sign.cl_0.engineSign(Unknown Source:11) at java.security.Signature.sign(Signature.java:739) at ru.CryptoPro.CAdES.tools.verifier.SignatureOutputStream.sign(Unknown Source:2) at ru.CryptoPro.CAdES.tools.verifier.GostContentSignerProvider.getSignature(Unknown Source:2) at org.bouncycastle.cms.SignerInfoGenerator.generate(Unknown Source:103) at org.bouncycastle.cms.CMSSignedDataStreamGenerator$CmsSignedDataOutputStream.close(Unknown Source:118) at ru.CryptoPro.CAdES.cl_1.close(Unknown Source:12)
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Здравствуйте. Код:
cAdESSignature.addSigner(JCSP.PROVIDER_NAME // <- в примере выше стоит JCP, хотя был JCSP
и Код:
AdESConfig.setDefaultProvider(JCSP.PROVIDER_NAME...
в начале. |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close