Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
В приложенном примере чтение PFX показывало закрытый ключ? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 16.02.2021(UTC) Сообщений: 21 Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
Непосредственно сам пример не получилось запустить. Я взял оттуда "строку" с контейнером - для нее возвращается null.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Автор: RybalkoAA Непосредственно сам пример не получилось запустить. Я взял оттуда "строку" с контейнером - для нее возвращается null. Почему не получилось? Есть вероятность, что все-таки что-то осталось от старого sdk в составе приложения. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 16.02.2021(UTC) Сообщений: 21 Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
Скрин ошибок прикладываю. 2021-03-23_11-00-24.png (94kb) загружен 6 раз(а).Отредактировано пользователем 23 марта 2021 г. 11:05:13(UTC)
| Причина: Не указана
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 16.02.2021(UTC) Сообщений: 21 Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
Также при сборке своего приложения в директориях ..\app\build\intermediates\merged_native_libs и ..\app\build\intermediates\stripped_native_libs получаю набор, видимо, старых длл libcspjni.so, libjcpcsclite.so, librtconnection.so, librtpcsc.so, libsupport.so Это важно или нет?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 09.09.2020(UTC) Сообщений: 10
Поблагодарили: 1 раз в 1 постах
|
Добрый день. 1. Попробуйте установить параметры при сборке (--stacktrace, --info, --scan), которые предлагаются на скрине выше, для вывода более детальной ошибки. 2. Возможно где-то закэшировались старые либы. Попробуйте почистить проект, затем выполнить следующие команды перед сборкой: ./gradlew build cleanBuildCache ./gradlew build --refresh-dependencies 3. Прошу проверить корректность встраивания провайдера в ваше приложение (обратите внимание на п. 1 и п.3 документа android-csp-5.0.42324\examples\Doc\How_to_build_android_examples.docx, а также на либы в папке ACSPInClientApp\libs и параметр "android:extractNativeLibs="true" файла AndroidManifest.xml).
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 16.02.2021(UTC) Сообщений: 21 Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
В итоге скачал заново и вроде бы получилось запустить ACSPInCLientApp, однако сразу ошибка на первом тесте: image_2021-03-23_14-58-49.png (129kb) загружен 3 раз(а).Ну и все равно - в нем же нет импорта PFX...
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 16.02.2021(UTC) Сообщений: 21 Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
Поправка. Запустил на реальном телефоне - пример свалился на 4 тесте: photo_2021-03-23_15-20-48.jpg (81kb) загружен 2 раз(а).Тестовые приложения не могут работать на эмуляторе?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 16.02.2021(UTC) Сообщений: 21 Откуда: Москва Сказал(а) «Спасибо»: 1 раз
|
Итого после установки лицензии и прочего чуть модифицировал RfxReaderExample и запускаю его из ACSPInClientApp. Но получаю ошибки либо 0x80090005 Bad Data, либо 0x8010006b Неправильный пин. Подскажите, пожалуйста, в чем проблема? Код: Код:String encodedPFX =
"MIIIEAIBAzCCB8wGCSqGSIb3DQEHAaCCB70Egge5MIIHtTCCAZ4" +
"GCSqGSIb3DQEHAaCCAY8EggGLMIIBhzCCAYMGCyqGSIb3DQEMCg" +
"ECoIGyMIGvMCQGCiqGSIb3DQEMAVAwFgQQ/PwrD+l9wGF68ZZ0U" +
"sxxHgICB9AEgYZynsNssypB2PQ6eyRqkMhDBATPNpXTRw98RwdV" +
"b2RszQMFuL4SufHel37L2u20SJoZzKknqFus39M/t2h1nnI1+cc" +
"h6FsncfgwTT4sk7RmuTCq8VJADdUlGMpVeS0SKpAetcX6W4hCPc" +
"eG8+oNs1V9xhs6kQSKCMtU7u5sX1wZo9EL1dvwiTGBvjATBgkqh" +
"kiG9w0BCRUxBgQEAQAAADAfBgkqhkiG9w0BCRQxEh4QAHQAZQBz" +
"AHQATABkAGEAcDCBhQYJKwYBBAGCNxEBMXgedgBDAHIAeQBwAHQ" +
"AbwAtAFAAcgBvACAARwBPAFMAVAAgAFIAIAAzADQALgAxADAALQ" +
"AyADAAMAAxACAAQwByAHkAcAB0AG8AZwByAGEAcABoAGkAYwAgA" +
"FMAZQByAHYAaQBjAGUAIABQAHIAbwB2AGkAZABlAHIwggYPBgkq" +
"hkiG9w0BBwGgggYABIIF/DCCBfgwggNOBgsqhkiG9w0BDAoBA6C" +
"CAyYwggMiBgoqhkiG9w0BCRYBoIIDEgSCAw4wggMKMIICuaADAg" +
"ECAhMSADfuLFVACI6FScqeAAEAN+4sMAgGBiqFAwICAzB/MSMwI" +
"QYJKoZIhvcNAQkBFhRzdXBwb3J0QGNyeXB0b3Byby5ydTELMAkG" +
"A1UEBhMCUlUxDzANBgNVBAcTBk1vc2NvdzEXMBUGA1UEChMOQ1J" +
"ZUFRPLVBSTyBMTEMxITAfBgNVBAMTGENSWVBUTy1QUk8gVGVzdC" +
"BDZW50ZXIgMjAeFw0xOTA2MjUxMDAyMTFaFw0yMDA5MjUxMDEyM" +
"TFaMBMxETAPBgNVBAMTCHRlc3RMZGFwMGMwHAYGKoUDAgITMBIG" +
"ByqFAwICIwEGByqFAwICHgEDQwAEQMvqQrH73Y2Ck3c8XeEDBNm" +
"WwwGtrmIK8Sbg0xtmR3bYjNlv/GltQ/UcGlFkCCyyWegBpdcwZK" +
"zLs0XxT0a7vWujggF2MIIBcjAOBgNVHQ8BAf8EBAMCBsAwEwYDV" +
"R0lBAwwCgYIKwYBBQUHAwIwHQYDVR0OBBYEFJ2jpeVY4f766/If" +
"wsiEpgHP1X08MB8GA1UdIwQYMBaAFF1lNz6BtHBkD7Vk8mfoVxL" +
"8/gkBMFwGA1UdHwRVMFMwUaBPoE2GS2xkYXA6Ly90ZXN0Y2EuY3" +
"J5cHRvcHJvLnJ1L0NlcnRFbnJvbGwvQ1JZUFRPLVBSTyUyMFRlc" +
"3QlMjBDZW50ZXIlMjAyKDEpLmNybDCBrAYIKwYBBQUHAQEEgZ8w" +
"gZwwZAYIKwYBBQUHMAKGWGh0dHA6Ly90ZXN0Y2EuY3J5cHRvcHJ" +
"vLnJ1L0NlcnRFbnJvbGwvdGVzdC1jYS0yMDE0X0NSWVBUTy1QUk" +
"8lMjBUZXN0JTIwQ2VudGVyJTIwMigxKS5jcnQwNAYIKwYBBQUHM" +
"AGGKGh0dHA6Ly90ZXN0Y2EuY3J5cHRvcHJvLnJ1L29jc3Avb2Nz" +
"cC5zcmYwCAYGKoUDAgIDA0EAcC6dPWrt7ZkjKsNVY2PrFJ18vxL" +
"w8S+//I+rSbHtkuZ7cdNo8u7V60hcP14YlnzfdZxsOnRUq1SiP9" +
"QvNOpfjzEVMBMGCSqGSIb3DQEJFTEGBAQBAAAAMIICogYLKoZIh" +
"vcNAQwKAQOgggKPMIICiwYKKoZIhvcNAQkWAaCCAnsEggJ3MIIC" +
"czCCAiKgAwIBAgIQdBHxHnsH37FPkoMPq+fT3DAIBgYqhQMCAgM" +
"wfzEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBjcnlwdG9wcm8ucn" +
"UxCzAJBgNVBAYTAlJVMQ8wDQYDVQQHEwZNb3Njb3cxFzAVBgNVB" +
"AoTDkNSWVBUTy1QUk8gTExDMSEwHwYDVQQDExhDUllQVE8tUFJP" +
"IFRlc3QgQ2VudGVyIDIwHhcNMTkwNTI3MDcyNDI2WhcNMjQwNTI" +
"2MDczNDA1WjB/MSMwIQYJKoZIhvcNAQkBFhRzdXBwb3J0QGNyeX" +
"B0b3Byby5ydTELMAkGA1UEBhMCUlUxDzANBgNVBAcTBk1vc2Nvd" +
"zEXMBUGA1UEChMOQ1JZUFRPLVBSTyBMTEMxITAfBgNVBAMTGENS" +
"WVBUTy1QUk8gVGVzdCBDZW50ZXIgMjBjMBwGBiqFAwICEzASBgc" +
"qhQMCAiMBBgcqhQMCAh4BA0MABEDmvSYqTo0hLydL2V4XmZYQzx" +
"pHC3KRWEkkjVjARVES9MhOVwD60z/cgHG6H2/G9i6bdpvTNP7Zl" +
"Gw8KOMCGdfLo3gwdjALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw" +
"AwEB/zAdBgNVHQ4EFgQUXWU3PoG0cGQPtWTyZ+hXEvz+CQEwEgY" +
"JKwYBBAGCNxUBBAUCAwEAATAjBgkrBgEEAYI3FQIEFgQUBGJVKQ" +
"sOsc3ReX2auMgfaZ42h/MwCAYGKoUDAgIDA0EACyYtdNDVS06W2" +
"V1+7swAPbmFPd/2iy5Pt/91N54/E5NYYuwNGD9qS4JjBZtS4i0O" +
"2sDFvzoUyrqTh0NAAMi4FjEAMDswHzAHBgUrDgMCGgQUZK53KMr" +
"x8w4Gnb1fkei141jjXpEEFKl2V92ugYS5gc/DVyKJf5uZLH7rAg" +
"IH0A==";
char[] password = "1".toCharArray();
Decoder decoder = new Decoder();
byte[] decodedPFX = decoder.decodeBuffer(encodedPFX);
Logger.INSTANCE.append("Load PFX.");
ByteArrayInputStream in = new ByteArrayInputStream(decodedPFX);
KeyStore pfxStore = KeyStore.getInstance(JCSP.PFX_STORE_NAME, JCSP.PROVIDER_NAME);
pfxStore.load(in, password);
Enumeration<String> aliases = pfxStore.aliases();
Logger.INSTANCE.append("Read PFX.");
PrivateKey privateKey2 = null;
X509Certificate cert2 = null;
while (aliases.hasMoreElements()) {
String alias = aliases.nextElement();
Logger.INSTANCE.append("%%% ALIAS: " + alias);
boolean isKeyEntry = pfxStore.isKeyEntry(alias);
boolean isCertEntry = pfxStore.isCertificateEntry(alias);
Logger.INSTANCE.append("\tIs a key entry: " + isKeyEntry);
Logger.INSTANCE.append("\tIs a certificate entry: " + isCertEntry);
if (isKeyEntry) {
privateKey2 = (PrivateKey) pfxStore.getKey(alias, null);
}
if (isCertEntry) {
cert2 = (X509Certificate) pfxStore.getCertificate(alias);
}
} // while
if (privateKey2 != null && cert2 != null) {
KeyStore keyStore = KeyStore.getInstance(JCSP.HD_STORE_NAME, JCSP.PROVIDER_NAME);
keyStore.load(null, null);
KeyStore.ProtectionParameter protectedParam = new KeyStore.PasswordProtection(password);
JCPPrivateKeyEntry entryIn = new JCPPrivateKeyEntry(privateKey2, new X509Certificate[] {cert2});
keyStore.setEntry(ALIAS, entryIn, protectedParam);
}
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 09.09.2020(UTC) Сообщений: 10
Поблагодарили: 1 раз в 1 постах
|
Добрый день. Ошибки у вас возникали из-за того, что пытались установить в ключевой контейнер несоответствующий ему сертификат (cert2 = (X509Certificate) pfxStore.getCertificate(alias); - в данном примере тут берется корневой сертификат. Чтобы загрузить из pfx сертификат, соответствующий закрытому ключу, нужно использовать тот же алиас, что и при получении закрытого ключа). Вот исправленный ваш код: Код:
@Override
public Void execute() throws Exception {
String encodedPFX =
"MIIIEAIBAzCCB8wGCSqGSIb3DQEHAaCCB70Egge5MIIHtTCCAZ4" +
"GCSqGSIb3DQEHAaCCAY8EggGLMIIBhzCCAYMGCyqGSIb3DQEMCg" +
"ECoIGyMIGvMCQGCiqGSIb3DQEMAVAwFgQQ/PwrD+l9wGF68ZZ0U" +
"sxxHgICB9AEgYZynsNssypB2PQ6eyRqkMhDBATPNpXTRw98RwdV" +
"b2RszQMFuL4SufHel37L2u20SJoZzKknqFus39M/t2h1nnI1+cc" +
"h6FsncfgwTT4sk7RmuTCq8VJADdUlGMpVeS0SKpAetcX6W4hCPc" +
"eG8+oNs1V9xhs6kQSKCMtU7u5sX1wZo9EL1dvwiTGBvjATBgkqh" +
"kiG9w0BCRUxBgQEAQAAADAfBgkqhkiG9w0BCRQxEh4QAHQAZQBz" +
"AHQATABkAGEAcDCBhQYJKwYBBAGCNxEBMXgedgBDAHIAeQBwAHQ" +
"AbwAtAFAAcgBvACAARwBPAFMAVAAgAFIAIAAzADQALgAxADAALQ" +
"AyADAAMAAxACAAQwByAHkAcAB0AG8AZwByAGEAcABoAGkAYwAgA" +
"FMAZQByAHYAaQBjAGUAIABQAHIAbwB2AGkAZABlAHIwggYPBgkq" +
"hkiG9w0BBwGgggYABIIF/DCCBfgwggNOBgsqhkiG9w0BDAoBA6C" +
"CAyYwggMiBgoqhkiG9w0BCRYBoIIDEgSCAw4wggMKMIICuaADAg" +
"ECAhMSADfuLFVACI6FScqeAAEAN+4sMAgGBiqFAwICAzB/MSMwI" +
"QYJKoZIhvcNAQkBFhRzdXBwb3J0QGNyeXB0b3Byby5ydTELMAkG" +
"A1UEBhMCUlUxDzANBgNVBAcTBk1vc2NvdzEXMBUGA1UEChMOQ1J" +
"ZUFRPLVBSTyBMTEMxITAfBgNVBAMTGENSWVBUTy1QUk8gVGVzdC" +
"BDZW50ZXIgMjAeFw0xOTA2MjUxMDAyMTFaFw0yMDA5MjUxMDEyM" +
"TFaMBMxETAPBgNVBAMTCHRlc3RMZGFwMGMwHAYGKoUDAgITMBIG" +
"ByqFAwICIwEGByqFAwICHgEDQwAEQMvqQrH73Y2Ck3c8XeEDBNm" +
"WwwGtrmIK8Sbg0xtmR3bYjNlv/GltQ/UcGlFkCCyyWegBpdcwZK" +
"zLs0XxT0a7vWujggF2MIIBcjAOBgNVHQ8BAf8EBAMCBsAwEwYDV" +
"R0lBAwwCgYIKwYBBQUHAwIwHQYDVR0OBBYEFJ2jpeVY4f766/If" +
"wsiEpgHP1X08MB8GA1UdIwQYMBaAFF1lNz6BtHBkD7Vk8mfoVxL" +
"8/gkBMFwGA1UdHwRVMFMwUaBPoE2GS2xkYXA6Ly90ZXN0Y2EuY3" +
"J5cHRvcHJvLnJ1L0NlcnRFbnJvbGwvQ1JZUFRPLVBSTyUyMFRlc" +
"3QlMjBDZW50ZXIlMjAyKDEpLmNybDCBrAYIKwYBBQUHAQEEgZ8w" +
"gZwwZAYIKwYBBQUHMAKGWGh0dHA6Ly90ZXN0Y2EuY3J5cHRvcHJ" +
"vLnJ1L0NlcnRFbnJvbGwvdGVzdC1jYS0yMDE0X0NSWVBUTy1QUk" +
"8lMjBUZXN0JTIwQ2VudGVyJTIwMigxKS5jcnQwNAYIKwYBBQUHM" +
"AGGKGh0dHA6Ly90ZXN0Y2EuY3J5cHRvcHJvLnJ1L29jc3Avb2Nz" +
"cC5zcmYwCAYGKoUDAgIDA0EAcC6dPWrt7ZkjKsNVY2PrFJ18vxL" +
"w8S+//I+rSbHtkuZ7cdNo8u7V60hcP14YlnzfdZxsOnRUq1SiP9" +
"QvNOpfjzEVMBMGCSqGSIb3DQEJFTEGBAQBAAAAMIICogYLKoZIh" +
"vcNAQwKAQOgggKPMIICiwYKKoZIhvcNAQkWAaCCAnsEggJ3MIIC" +
"czCCAiKgAwIBAgIQdBHxHnsH37FPkoMPq+fT3DAIBgYqhQMCAgM" +
"wfzEjMCEGCSqGSIb3DQEJARYUc3VwcG9ydEBjcnlwdG9wcm8ucn" +
"UxCzAJBgNVBAYTAlJVMQ8wDQYDVQQHEwZNb3Njb3cxFzAVBgNVB" +
"AoTDkNSWVBUTy1QUk8gTExDMSEwHwYDVQQDExhDUllQVE8tUFJP" +
"IFRlc3QgQ2VudGVyIDIwHhcNMTkwNTI3MDcyNDI2WhcNMjQwNTI" +
"2MDczNDA1WjB/MSMwIQYJKoZIhvcNAQkBFhRzdXBwb3J0QGNyeX" +
"B0b3Byby5ydTELMAkGA1UEBhMCUlUxDzANBgNVBAcTBk1vc2Nvd" +
"zEXMBUGA1UEChMOQ1JZUFRPLVBSTyBMTEMxITAfBgNVBAMTGENS" +
"WVBUTy1QUk8gVGVzdCBDZW50ZXIgMjBjMBwGBiqFAwICEzASBgc" +
"qhQMCAiMBBgcqhQMCAh4BA0MABEDmvSYqTo0hLydL2V4XmZYQzx" +
"pHC3KRWEkkjVjARVES9MhOVwD60z/cgHG6H2/G9i6bdpvTNP7Zl" +
"Gw8KOMCGdfLo3gwdjALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw" +
"AwEB/zAdBgNVHQ4EFgQUXWU3PoG0cGQPtWTyZ+hXEvz+CQEwEgY" +
"JKwYBBAGCNxUBBAUCAwEAATAjBgkrBgEEAYI3FQIEFgQUBGJVKQ" +
"sOsc3ReX2auMgfaZ42h/MwCAYGKoUDAgIDA0EACyYtdNDVS06W2" +
"V1+7swAPbmFPd/2iy5Pt/91N54/E5NYYuwNGD9qS4JjBZtS4i0O" +
"2sDFvzoUyrqTh0NAAMi4FjEAMDswHzAHBgUrDgMCGgQUZK53KMr" +
"x8w4Gnb1fkei141jjXpEEFKl2V92ugYS5gc/DVyKJf5uZLH7rAg" +
"IH0A==";
char[] password = "1".toCharArray();
Decoder decoder = new Decoder();
byte[] decodedPFX = decoder.decodeBuffer(encodedPFX);
Logger.INSTANCE.append("Load PFX.");
ByteArrayInputStream in = new ByteArrayInputStream(decodedPFX);
KeyStore pfxStore = KeyStore.getInstance(JCSP.PFX_STORE_NAME, JCSP.PROVIDER_NAME);
pfxStore.load(in, password);
Enumeration<String> aliases = pfxStore.aliases();
Logger.INSTANCE.append("Read PFX.");
while (aliases.hasMoreElements()) {
String alias = aliases.nextElement();
Logger.INSTANCE.append("%%% ALIAS: " + alias);
PrivateKey key = (PrivateKey) pfxStore.getKey(alias, password);
Certificate[] chain = pfxStore.getCertificateChain(alias);
if (key != null && chain != null) {
JCPKeyPair kp = new JCPKeyPair(chain[0].getPublicKey(), key);
if (kp.match()) {
KeyStore keyStore = KeyStore.getInstance(JCSP.HD_STORE_NAME, JCSP.PROVIDER_NAME);
keyStore.load(null, null);
JCPPrivateKeyEntry keyEntry = new JCPPrivateKeyEntry(key, chain, true);
JCPProtectionParameter parameter = new JCPProtectionParameter(password);
keyStore.setEntry(alias, keyEntry, parameter);
break;
}
}
} // while
Logger.INSTANCE.append("PFX has been read (OK)");
return null;
}
Отредактировано пользователем 24 марта 2021 г. 13:10:18(UTC)
| Причина: Не указана
|
1 пользователь поблагодарил lepestova за этот пост.
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close