Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Посмотрите пример WriteContainerExample в пакете JCSP.Container в samples-sources.jar. Тут ключ создается сразу в контейнере с помощью NameAlgIdSpec, переданного в генератор ключа, без сохранения с помощью KeyStore. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 14.10.2020(UTC) Сообщений: 29
Сказал(а) «Спасибо»: 5 раз
|
Автор: Евгений Афанасьев  Посмотрите пример WriteContainerExample в пакете JCSP.Container в samples-sources.jar. Тут ключ создается сразу в контейнере с помощью NameAlgIdSpec, переданного в генератор ключа, без сохранения с помощью KeyStore. Получилось вот так. Причем, после генерации энтропии просит придумать новый пароль для контейнера. Код:object Generator extends App {
Security.addProvider(new JCSP())
Security.addProvider(new RevCheck())
Security.addProvider(new CryptoProvider())
Security.addProvider(new Provider())
java.awt.Toolkit.getDefaultToolkit
val alias = "mondaytwothree24"
val password = "123456"
val container = "\\\\.\\HDIMAGE\\myusername"
val keyStore = KeyStore.getInstance("HDIMAGE", JCSP.PROVIDER_NAME)
keyStore.load(null, null)
val params = new NameAlgIdSpec(AlgIdSpec.OID_PARAMS_EXC_2012_256, container)
val kg = KeyPairGenerator.getInstance(JCP.GOST_DH_2012_256_NAME, JCSP.PROVIDER_NAME)
kg.initialize(params)
val pair = kg.generateKeyPair()
val certReq = new GostCertificateRequest(JCSP.PROVIDER_NAME)
certReq.setKeyUsage(KeyUsage.CRYPT_DEFAULT)
certReq.addExtKeyUsage(KeyUsage.INTS_PKIX_CLIENT_AUTH)
certReq.addExtKeyUsage(KeyUsage.INTS_PKIX_SERVER_AUTH)
certReq.setPublicKeyInfo(pair.getPublic)
certReq.setSubjectInfo("CN=Dragonov, OU=Sesurity, O=CryptoPro, C=RU")
certReq.encodeAndSign(pair.getPrivate, JCP.GOST_SIGN_2012_256_NAME)
val certBytes = certReq.getEncoded
val certFactory = CertificateFactory.getInstance(JCP.CERTIFICATE_FACTORY_NAME)
val clientCert = certFactory.generateCertificate(new ByteArrayInputStream(certBytes))
val clientChain = Array(clientCert)
keyStore.setKeyEntry(alias, pair.getPrivate, password.toCharArray, clientChain)
keyStore.store(null, null)
}
Ошибка теперь при генерации сертификата Код:java.security.cert.CertificateParsingException: java.io.IOException: ObjectIdentifier() -- data isn't an object ID (tag = 49)
at java.base/sun.security.x509.X509CertInfo.<init>(X509CertInfo.java:171)
at java.base/sun.security.x509.X509CertImpl.parse(X509CertImpl.java:1854)
at java.base/sun.security.x509.X509CertImpl.<init>(X509CertImpl.java:195)
at java.base/sun.security.provider.X509Factory.engineGenerateCertificate(X509Factory.java:102)
at java.base/java.security.cert.CertificateFactory.generateCertificate(CertificateFactory.java:355)
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
1. Пароль запрашивается, потому что используется setKeyEntry, а не setEntry (см. в примере в месте сохранения - askPinInWindowOnCopy). 2. При генерации сертификата лучше следовать упомянутому примеру ( в вашем случае из certReq.getEncoded получен просто тот же запрос), см. ф. generateCertificate в примере: запрос подписывается и отправляется в тестовый УЦ с помощью ф. getEncodedCert, после чего сертификат устанавливается в контейнер. Если же создавать самоподписанный сертификат, то нужно использовать код вида (ф. getEncodedSelfCert): Код:
GostCertificateRequest certReq = new GostCertificateRequest(JCSP.PROVIDER_NAME);
certReq.init(pair.getPrivate().getAlgorithm());
byte[] certBytes = certReq.getEncodedSelfCert(pair, "CN=Dragonov, OU=Sesurity, O=CryptoPro, C=RU", JCP.GOST_SIGN_2012_256_NAME);
clientCert = certFactory.generateCertificate(new ByteArrayInputStream(certBytes))
...
Отредактировано пользователем 24 ноября 2020 г. 12:30:35(UTC)
| Причина: Не указана |
|
 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 14.10.2020(UTC) Сообщений: 29
Сказал(а) «Спасибо»: 5 раз
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close