Статус: Участник
Группы: Участники
Зарегистрирован: 14.10.2020(UTC) Сообщений: 29
Сказал(а) «Спасибо»: 5 раз
|
Добрый день! В системе установлен CSP 5.0.11823. Использую Java CSP 5.0.40621-A и Java 11. При создании GostCertificateRequest получаю следующую ошибку Код:java.security.InvalidKeyException: Key algorithm does not match the signature algorithm.
at ru.CryptoPro.JCSP.Sign.CryptoProSign.engineInitSign(Unknown Source)
at java.base/java.security.Signature.initSign(Signature.java:546)
at ru.CryptoPro.JCPRequest.GostCertificateRequest.sign(Unknown Source)
at ru.CryptoPro.JCPRequest.GostCertificateRequest.encodeAndSign(Unknown Source)
at ru.CryptoPro.JCPRequest.GostCertificateRequest.encodeAndSign(Unknown Source)
Код использую следующий Код:val alias = "mytestalias1"
val password = "123456"
val keyStore = KeyStore.getInstance("HDIMAGE", JCSP.PROVIDER_NAME)
keyStore.load(null, "123456".toCharArray)
val kg = KeyPairGenerator.getInstance(JCP.GOST_DH_2012_256_NAME, JCSP.PROVIDER_NAME)
kg.initialize(new CryptDhAllowedSpec())
val pair = kg.generateKeyPair()
val jcpPrivateKeyEntry = new JCPPrivateKeyEntry(pair.getPrivate, Array.empty[Certificate], true)
keyStore.setEntry(alias, jcpPrivateKeyEntry, new KeyStore.PasswordProtection(password.toCharArray))
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) // ошибка
val certBytes = certReq.getEncoded
Если в метод encodeAndSign передать название алгоритма JCP.GOST_SIGN_2012_256_NAME, то падает с ошибкой Unsupported method. Отредактировано пользователем 23 ноября 2020 г. 21:08:51(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Здравствуйте. Да, в encodeAndSign надо передать JCP.GOST_SIGN_2012_256_NAME
На счёт ошибки unsupported - при добавлении провайдеров первым идёт JCSP? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 14.10.2020(UTC) Сообщений: 29
Сказал(а) «Спасибо»: 5 раз
|
Автор: Евгений Афанасьев  Здравствуйте. Да, в encodeAndSign надо передать JCP.GOST_SIGN_2012_256_NAME
На счёт ошибки unsupported - при добавлении провайдеров первым идёт JCSP? Провайдеры добавляются следующим образом Код: Security.addProvider(new JCSP())
Security.addProvider(new RevCheck())
Security.addProvider(new CryptoProvider())
Security.addProvider(new Provider())
Отредактировано пользователем 23 ноября 2020 г. 22:11:57(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Тогда приведите пожалуйста, стек ошибки с Unsupported method Такая ошибка возможна, если есть несоответствие в именах провайдеров при получении ключа и инициализации подписи, например, Signature от JCP, а ключ от JCSP. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 14.10.2020(UTC) Сообщений: 29
Сказал(а) «Спасибо»: 5 раз
|
Автор: Евгений Афанасьев  Тогда приведите пожалуйста, стек ошибки с Unsupported method Код:java.security.SignatureException: Unsupported method.
at ru.CryptoPro.JCSP.Key.AbstractKeySpec.signature(Unknown Source)
at ru.CryptoPro.JCP.Sign.cl_0.engineSign(Unknown Source)
at java.base/java.security.Signature.sign(Signature.java:598)
at ru.CryptoPro.JCPRequest.GostCertificateRequest.sign(Unknown Source)
at ru.CryptoPro.JCPRequest.GostCertificateRequest.encodeAndSign(Unknown Source)
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
В стеке ошибки есть ru.CryptoPro.JCP.Sign.cl_0.engineSign То есть используется реализация подписи JCP, а не JCSP, если, например, в GostCertificateRequest не передать имя провайдера JCSP, а провайдер JCP при этом наверху списка провайдеров. Можете привести полный код с добавлением провайдеров и формированием запроса? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 14.10.2020(UTC) Сообщений: 29
Сказал(а) «Спасибо»: 5 раз
|
Автор: Евгений Афанасьев  В стеке ошибки есть ru.CryptoPro.JCP.Sign.cl_0.engineSign То есть используется реализация подписи JCP, а не JCSP, если, например, в GostCertificateRequest не передать имя провайдера JCSP, а провайдер JCP при этом наверху списка провайдеров. Можете привести полный код с добавлением провайдеров и формированием запроса? Код:import java.io.ByteArrayInputStream
import java.security.cert.CertificateFactory
import java.security.{KeyPairGenerator, KeyStore, Security}
import java.security.cert.Certificate
import ru.CryptoPro.Crypto.CryptoProvider
import ru.CryptoPro.JCP.JCP
import ru.CryptoPro.JCP.KeyStore.JCPPrivateKeyEntry
import ru.CryptoPro.JCP.params.CryptDhAllowedSpec
import ru.CryptoPro.JCPRequest.{GostCertificateRequest, KeyUsage}
import ru.CryptoPro.JCSP.JCSP
import ru.CryptoPro.reprov.RevCheck
import ru.CryptoPro.ssl.Provider
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 = "mondaytwothree20"
val password = "123456"
val keyStore = KeyStore.getInstance("HDIMAGE", JCSP.PROVIDER_NAME)
keyStore.load(null, "123456".toCharArray)
val kg = KeyPairGenerator.getInstance(JCP.GOST_DH_2012_256_NAME, JCSP.PROVIDER_NAME)
kg.initialize(new CryptDhAllowedSpec())
val pair = kg.generateKeyPair()
val jcpPrivateKeyEntry = new JCPPrivateKeyEntry(pair.getPrivate, Array.empty[Certificate], true)
keyStore.setEntry(alias, jcpPrivateKeyEntry, new KeyStore.PasswordProtection(password.toCharArray))
println(s"Saved alias $alias to keystore")
val certReq = new GostCertificateRequest()
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, password.toCharArray)
}
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
val certReq = new GostCertificateRequest() - вы же выше другой пример приводили, см. 1 пост. Укажите провайдер тут. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 14.10.2020(UTC) Сообщений: 29
Сказал(а) «Спасибо»: 5 раз
|
Автор: Евгений Афанасьев  val certReq = new GostCertificateRequest() - вы же выше другой пример приводили, см. 1 пост. Укажите провайдер тут. Похоже, скопировал в тот момент, когда проводил эксперименты. Если в конструктор передать имя провайдера, то ошбика следующая Код:java.lang.IllegalArgumentException: ru.CryptoPro.JCSP.MSCAPI.MSHashNSignException: Hash or Sign ERROR: 0x80090016
at ru.CryptoPro.JCSP.MSCAPI.cl_4.b(Unknown Source)
at ru.CryptoPro.JCSP.MSCAPI.cl_3.a(Unknown Source)
at ru.CryptoPro.JCSP.Key.AbstractKeySpec.signature(Unknown Source)
at ru.CryptoPro.JCSP.Sign.CryptoProSign.engineSign(Unknown Source)
at ru.CryptoPro.JCSP.Sign.JCSPGostElSign.engineSign(Unknown Source)
at java.base/java.security.Signature.sign(Signature.java:598)
at ru.CryptoPro.JCPRequest.GostCertificateRequest.sign(Unknown Source)
at ru.CryptoPro.JCPRequest.GostCertificateRequest.encodeAndSign(Unknown Source)
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Проверим предложенный пример. Но, полагаю, проблема в том, что вы используете ключ для подписи, при том, что он не в контейнере. Также: * можно вызывать keyStore.load(null, null) без пароля, пароль не влияет в этом случае; * вызов keyStore.store(null, password.toCharArray) для ключевого контейнера излишен, не влияет в этом случае. Отредактировано пользователем 24 ноября 2020 г. 12:06:57(UTC)
| Причина: Не указана |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close