Atom Лента - Форум КриптоПро - Тема:CryptoPro 5.0.42324 - Импорт PFX - 10Форум КриптоПро - Atom Лентаurn:https:--www-cryptopro-ru:AtomLenta:ForumKriptoPro:Tema:CryptoPro5.0.42324-ImportPFX-10:1Copyright 2024 Форум КриптоПро2024-03-28T12:32:37Zhttps://www.cryptopro.ru/forum2/Images/YAFLogo.pngForum Adminhttps://www.cryptopro.ruforum@cryptopro.ruRybalkoAAhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=58628&name=RybalkoAARybalkoAAhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=58628&name=RybalkoAAlepestovahttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=57348&name=lepestovaRybalkoAAhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=58628&name=RybalkoAARybalkoAAhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=58628&name=RybalkoAARybalkoAAhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=58628&name=RybalkoAAlepestovahttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=57348&name=lepestovaRybalkoAAhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=58628&name=RybalkoAARybalkoAAhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=58628&name=RybalkoAAЕвгений Афанасьевhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=1064&name=Евгений АфанасьевRybalkoAAhttps://www.cryptopro.ru/forum2/default.aspx?g=profile&u=58628&name=RybalkoAAYetAnotherForum.NETurn:https:--www-cryptopro-ru:ftPosts:st1:meid123803:1CryptoPro 5.0.42324 - Импорт PFX<table class="content postContainer_Alt" width="100%"><tr><td>Спасибо большое, вроде бы работает! Буду дальше пилить.</td></tr></table>2021-03-25T15:43:12+03:002021-03-25T15:43:12+03:00RybalkoAA<table class="content postContainer_Alt" width="100%"><tr><td>Спасибо большое, вроде бы работает! Буду дальше пилить.</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid123770:1CryptoPro 5.0.42324 - Импорт PFX<table class="content postContainer" width="100%"><tr><td>Добрый день.<br />Ошибки у вас возникали из-за того, что пытались установить в ключевой контейнер несоответствующий ему сертификат (cert2 = (X509Certificate) pfxStore.getCertificate(alias); - в данном примере тут берется корневой сертификат. Чтобы загрузить из pfx сертификат, соответствующий закрытому ключу, нужно использовать тот же алиас, что и при получении закрытого ключа). <br /><br />Вот исправленный ваш код:<br /><br /> <div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-java">
@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;
}
</code></pre>
</div></div></td></tr></table>2021-03-24T13:10:18+03:002021-03-24T13:10:18+03:00lepestova<table class="content postContainer" width="100%"><tr><td>Добрый день.<br />Ошибки у вас возникали из-за того, что пытались установить в ключевой контейнер несоответствующий ему сертификат (cert2 = (X509Certificate) pfxStore.getCertificate(alias); - в данном примере тут берется корневой сертификат. Чтобы загрузить из pfx сертификат, соответствующий закрытому ключу, нужно использовать тот же алиас, что и при получении закрытого ключа). <br /><br />Вот исправленный ваш код:<br /><br /> <div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-java">
@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;
}
</code></pre>
</div></div></td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid123723:1CryptoPro 5.0.42324 - Импорт PFX<table class="content postContainer_Alt" width="100%"><tr><td>Итого после установки лицензии и прочего чуть модифицировал RfxReaderExample и запускаю его из ACSPInClientApp.<br />Но получаю ошибки либо 0x80090005 Bad Data, либо 0x8010006b Неправильный пин.<br />Подскажите, пожалуйста, в чем проблема?<br />Код:<br /><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-java">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);
}</code></pre>
</div></div></td></tr></table>2021-03-23T17:07:09+03:002021-03-23T17:07:09+03:00RybalkoAA<table class="content postContainer_Alt" width="100%"><tr><td>Итого после установки лицензии и прочего чуть модифицировал RfxReaderExample и запускаю его из ACSPInClientApp.<br />Но получаю ошибки либо 0x80090005 Bad Data, либо 0x8010006b Неправильный пин.<br />Подскажите, пожалуйста, в чем проблема?<br />Код:<br /><div class="code"><strong>Код:</strong><div class="innercode"><pre class="line-numbers"><code class="language-java">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);
}</code></pre>
</div></div></td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid123717:1CryptoPro 5.0.42324 - Импорт PFX<table class="content postContainer" width="100%"><tr><td>Поправка. Запустил на реальном телефоне - пример свалился на 4 тесте:<br />[attach]9562[/attach]<br />Тестовые приложения не могут работать на эмуляторе?</td></tr></table>2021-03-23T15:24:52+03:002021-03-23T15:24:52+03:00RybalkoAA<table class="content postContainer" width="100%"><tr><td>Поправка. Запустил на реальном телефоне - пример свалился на 4 тесте:<br />[attach]9562[/attach]<br />Тестовые приложения не могут работать на эмуляторе?</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid123716:1CryptoPro 5.0.42324 - Импорт PFX<table class="content postContainer_Alt" width="100%"><tr><td>В итоге скачал заново и вроде бы получилось запустить ACSPInCLientApp, однако сразу ошибка на первом тесте:<br />[attach]9561[/attach]<br />Ну и все равно - в нем же нет импорта PFX...</td></tr></table>2021-03-23T15:06:41+03:002021-03-23T15:06:41+03:00RybalkoAA<table class="content postContainer_Alt" width="100%"><tr><td>В итоге скачал заново и вроде бы получилось запустить ACSPInCLientApp, однако сразу ошибка на первом тесте:<br />[attach]9561[/attach]<br />Ну и все равно - в нем же нет импорта PFX...</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid123705:1CryptoPro 5.0.42324 - Импорт PFX<table class="content postContainer" width="100%"><tr><td>Добрый день.<br />1. Попробуйте установить параметры при сборке (--stacktrace, --info, --scan), которые предлагаются на скрине выше, для вывода более детальной ошибки.<br />2. Возможно где-то закэшировались старые либы. Попробуйте почистить проект, затем выполнить следующие команды перед сборкой:<br />./gradlew build cleanBuildCache<br />./gradlew build --refresh-dependencies<br />3. Прошу проверить корректность встраивания провайдера в ваше приложение (обратите внимание на п. 1 и п.3 документа android-csp-5.0.42324\examples\Doc\How_to_build_android_examples.docx, а также на либы в папке ACSPInClientApp\libs и параметр "android:extractNativeLibs="true" файла AndroidManifest.xml).</td></tr></table>2021-03-23T12:35:16+03:002021-03-23T12:35:16+03:00lepestova<table class="content postContainer" width="100%"><tr><td>Добрый день.<br />1. Попробуйте установить параметры при сборке (--stacktrace, --info, --scan), которые предлагаются на скрине выше, для вывода более детальной ошибки.<br />2. Возможно где-то закэшировались старые либы. Попробуйте почистить проект, затем выполнить следующие команды перед сборкой:<br />./gradlew build cleanBuildCache<br />./gradlew build --refresh-dependencies<br />3. Прошу проверить корректность встраивания провайдера в ваше приложение (обратите внимание на п. 1 и п.3 документа android-csp-5.0.42324\examples\Doc\How_to_build_android_examples.docx, а также на либы в папке ACSPInClientApp\libs и параметр "android:extractNativeLibs="true" файла AndroidManifest.xml).</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid123700:1CryptoPro 5.0.42324 - Импорт PFX<table class="content postContainer_Alt" width="100%"><tr><td>Также при сборке своего приложения в директориях ..\app\build\intermediates\merged_native_libs и ..\app\build\intermediates\stripped_native_libs получаю набор, видимо, старых длл libcspjni.so, libjcpcsclite.so, librtconnection.so, librtpcsc.so, libsupport.so<br />Это важно или нет?</td></tr></table>2021-03-23T11:10:26+03:002021-03-23T11:10:26+03:00RybalkoAA<table class="content postContainer_Alt" width="100%"><tr><td>Также при сборке своего приложения в директориях ..\app\build\intermediates\merged_native_libs и ..\app\build\intermediates\stripped_native_libs получаю набор, видимо, старых длл libcspjni.so, libjcpcsclite.so, librtconnection.so, librtpcsc.so, libsupport.so<br />Это важно или нет?</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid123699:1CryptoPro 5.0.42324 - Импорт PFX<table class="content postContainer" width="100%"><tr><td>Скрин ошибок прикладываю.<br />[attach]9558[/attach]</td></tr></table>2021-03-23T11:05:13+03:002021-03-23T11:05:13+03:00RybalkoAA<table class="content postContainer" width="100%"><tr><td>Скрин ошибок прикладываю.<br />[attach]9558[/attach]</td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid123685:1CryptoPro 5.0.42324 - Импорт PFX<table class="content postContainer_Alt" width="100%"><tr><td><div class="quote"><span class="quotetitle">Автор: RybalkoAA <a href="/forum2/default.aspx?g=posts&m=123682#post123682"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote>Непосредственно сам пример не получилось запустить.<br />Я взял оттуда "строку" с контейнером - для нее возвращается null.</div></div><br />Почему не получилось? Есть вероятность, что все-таки что-то осталось от старого sdk в составе приложения.<br /><br /></td></tr></table>2021-03-22T17:44:20+03:002021-03-22T17:44:20+03:00Евгений Афанасьев<table class="content postContainer_Alt" width="100%"><tr><td><div class="quote"><span class="quotetitle">Автор: RybalkoAA <a href="/forum2/default.aspx?g=posts&m=123682#post123682"><img src="/forum2/Themes/soclean/icon_latest_reply.gif" title="Перейти к цитате" alt="Перейти к цитате" /></a></span><blockquote>Непосредственно сам пример не получилось запустить.<br />Я взял оттуда "строку" с контейнером - для нее возвращается null.</div></div><br />Почему не получилось? Есть вероятность, что все-таки что-то осталось от старого sdk в составе приложения.<br /><br /></td></tr></table>urn:https:--www-cryptopro-ru:ftPosts:st1:meid123682:1CryptoPro 5.0.42324 - Импорт PFX<table class="content postContainer" width="100%"><tr><td>Непосредственно сам пример не получилось запустить.<br />Я взял оттуда "строку" с контейнером - для нее возвращается null.</td></tr></table>2021-03-22T17:34:16+03:002021-03-22T17:34:16+03:00RybalkoAA<table class="content postContainer" width="100%"><tr><td>Непосредственно сам пример не получилось запустить.<br />Я взял оттуда "строку" с контейнером - для нее возвращается null.</td></tr></table>