Статус: Участник
Группы: Участники
Зарегистрирован: 17.01.2018(UTC) Сообщений: 19 Поблагодарили: 1 раз в 1 постах
|
Здравствуйте. Использую КриптоПро Java csp-5.0.39267. Программно была создана ключевая пара, запрос на сертификат и самоподписанный сертификат. Ключи и сертификат были успешно сохранены в хранилище. На основе запроса был выпущен реальный сертификат (приходит кодированный в base64). При попытке сохранить его получаю ошибку: java.security.KeyStoreException: java.security.KeyException: Certificate is not correct: ru.CryptoPro.JCSP.MSCAPI.MSKeyParamException: KeyParam ERROR: 0x80090020 Сертификат точно соответствует ключам.
// String certBase64 - полученный сертификат // String keyStoreName - имя хранилища String certificateString = new String(Base64.getDecoder().decode(certBase64)); InputStream certificateStream = new ByteArrayInputStream(certificateString.getBytes(StandardCharsets.UTF_8)); KeyStore ks = KeyStore.getInstance(JCSP.HD_STORE_NAME, JCSP.PROVIDER_NAME); ks.load(null, null); CertificateFactory cf = CertificateFactory.getInstance("X509"); Certificate cert = cf.generateCertificate(certificateStream); // cert создается и выводится ks.setCertificateEntry(keyStoreName, cert); // на этой строке падает ks.store(null, null);
Подскажите, пожалуйста, из-за чего может возникать ошибка?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,005 Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Здравствуйте. Складывается впечатление, что проблема в сертификате (0x80090020 - Внутренняя ошибка.). Не могли бы вы его приложить? Порядок действий такой: 1. создаете KeyPair; 2. Создаете GostCertificateRequest; 3. Получаете запрос, сохраняете его; 4. Создаете самоподписанный сертификат с помощью getSelfCert в GostCertificateRequest; 5. Сохраняете в keyStore с ключом с помощью setEntry; 6. Выпускаете в УЦ сертификат по запросу; 7. Пробуете установить его в keyStore - получаете ошибку. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 17.01.2018(UTC) Сообщений: 19 Поблагодарили: 1 раз в 1 постах
|
Прикладываю сертификат, который не получилось загрузить test_Cert.txt (2kb) загружен 9 раз(а).Проделала все шаги, только в качестве УЦ использовала ваш тестовый - и все успешно без ошибок сохранилось.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 17.01.2018(UTC) Сообщений: 19 Поблагодарили: 1 раз в 1 постах
|
Однако при повторной попытке сохранения сертификата получаю ту же ошибку. Хотя в документации сказано, что он должен перезаписаться.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,005 Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
спасибо, проверим. я правильно понял, что у вас ошибка повторяется для любого сертификата? какая версия csp в формате x.x.xxxxx используется? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 17.01.2018(UTC) Сообщений: 19 Поблагодарили: 1 раз в 1 постах
|
Стоит CSP 4.0.9842 для linux. Не совсем для каждого. Сертификат, который мне выпустил сторонний УЦ, не записался вообще, а сертификат, сделанный в вашем тестовом УЦ, записался, но при второй попытке перезаписи получилась ошибка. Проверила еще раз. На новом сертификате из вашего УЦ, перезапись сработала. Отредактировано пользователем 11 июля 2018 г. 18:01:20(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,005 Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Здравствуйте. В следующих условиях воспроизвести не удалось: Ubuntu 13.10 x86 Код:
CSP (Type:80) v4.0.9018 KC1 Release Ver:4.0.9953 OS:Linux CPU:IA32 FastCode:READY:AVX.
java-csp-5.0.39267 Пример: Код:
public static void main(String[] args) throws Exception {
String alias = "test";
String dn = "CN=Margarita";
String alg = JCP.GOST_EL_SIGN_NAME;
KeyStore keyStore = KeyStore.getInstance(JCSP.HD_STORE_NAME, JCSP.PROVIDER_NAME);
keyStore.load(null, null);
KeyPairGenerator kpg = KeyPairGenerator.getInstance(JCP.GOST_EL_DEGREE_NAME, JCSP.PROVIDER_NAME);
KeyPair kp = kpg.generateKeyPair();
// самоподписанный
GostCertificateRequest request = new GostCertificateRequest(JCSP.PROVIDER_NAME);
byte[] selfCertEncoded = request.getEncodedSelfCert(kp, dn, alg);
CertificateFactory factory = CertificateFactory.getInstance("X.509");
X509Certificate selfCert = (X509Certificate) factory.generateCertificate(new ByteArrayInputStream(selfCertEncoded));
JCPProtectionParameter parameter = new JCPProtectionParameter("123".toCharArray());
JCPPrivateKeyEntry entry = new JCPPrivateKeyEntry(kp.getPrivate(), new Certificate[] {selfCert});
// сохраняем заглушку и ключ
keyStore.setEntry(alias, entry, parameter);
System.out.println("OK-1");
// выпускаем сертификат в УЦ
request = new GostCertificateRequest(JCSP.PROVIDER_NAME);
int keyUsage =
GostCertificateRequest.DIGITAL_SIGNATURE |
GostCertificateRequest.NON_REPUDIATION;
request.setKeyUsage(keyUsage);
request.addExtKeyUsage(GostCertificateRequest.INTS_PKIX_EMAIL_PROTECTION);
request.setPublicKeyInfo(kp.getPublic());
request.setSubjectInfo(dn);
request.encodeAndSign(kp.getPrivate(), alg);
byte[] certEncoded = request.getEncodedCert("http://www.cryptopro.ru/certsrv/");
// устанавливаем 2 раза!
X509Certificate cert = (X509Certificate) factory
.generateCertificate(new ByteArrayInputStream(certEncoded));
keyStore.setCertificateEntry(alias, cert);
System.out.println("OK-2");
keyStore.setCertificateEntry(alias, cert); // еще раз
System.out.println("OK-3");
}
|
|
1 пользователь поблагодарил Евгений Афанасьев за этот пост.
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 13.06.2018(UTC) Сообщений: 37
Сказал(а) «Спасибо»: 8 раз
|
Автор: Margarita Стоит CSP 4.0.9842 для linux. Не совсем для каждого. Сертификат, который мне выпустил сторонний УЦ, не записался вообще, а сертификат, сделанный в вашем тестовом УЦ, записался, но при второй попытке перезаписи получилась ошибка.
Проверила еще раз. На новом сертификате из вашего УЦ, перезапись сработала. Маргарита, Вам удалось сохранить сертификат указанным способом ks.setCertificateEntry(keyStoreName, cert)?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 17.01.2018(UTC) Сообщений: 19 Поблагодарили: 1 раз в 1 постах
|
Я пыталась сохранить той же самой функцией, которую вы предложили. Но видимо проблема была в одном конкретном сертификате, потому что при следующих попытках все отрабатывало. По бизнес требованиям я поняла, что мне не обязательно его сохранять в контейнер, поэтому больше проблемой не занималась.
|
1 пользователь поблагодарил Margarita за этот пост.
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 13.06.2018(UTC) Сообщений: 37
Сказал(а) «Спасибо»: 8 раз
|
Автор: Margarita Я пыталась сохранить той же самой функцией, которую вы предложили. Но видимо проблема была в одном конкретном сертификате, потому что при следующих попытках все отрабатывало. По бизнес требованиям я поняла, что мне не обязательно его сохранять в контейнер, поэтому больше проблемой не занималась. А какой сертификат удалось сохранить, Вам его перевыпустили или отработало с каким-то тестовым сертификатом?
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close