Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

2 Страницы<12
Опции
К последнему сообщению К первому непрочитанному
Offline Евгений Афанасьев  
#11 Оставлено : 24 ноября 2020 г. 12:09:20(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,910
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Посмотрите пример WriteContainerExample в пакете JCSP.Container в samples-sources.jar. Тут ключ создается сразу в контейнере с помощью NameAlgIdSpec, переданного в генератор ключа, без сохранения с помощью KeyStore.
Offline squadgazzz  
#12 Оставлено : 24 ноября 2020 г. 12:21:57(UTC)
squadgazzz

Статус: Участник

Группы: Участники
Зарегистрирован: 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)
Offline Евгений Афанасьев  
#13 Оставлено : 24 ноября 2020 г. 12:30:05(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,910
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
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)  | Причина: Не указана

thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
squadgazzz оставлено 24.11.2020(UTC)
Offline squadgazzz  
#14 Оставлено : 24 ноября 2020 г. 15:47:16(UTC)
squadgazzz

Статус: Участник

Группы: Участники
Зарегистрирован: 14.10.2020(UTC)
Сообщений: 29

Сказал(а) «Спасибо»: 5 раз
Спасибо, так сработало!
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
2 Страницы<12
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.