Статус: Активный участник
Группы: Участники
Зарегистрирован: 18.11.2016(UTC) Сообщений: 61  Откуда: Москва Сказал(а) «Спасибо»: 6 раз Поблагодарили: 3 раз в 2 постах
|
Коллеги, подскажите пожалуйста. Пробуем запустить на примере JCSP/Signature/Signature.java свое подписание из загрузки. Ниже код. Все в нем хорошо, только на строке validator.initVerify(publicKey); падает с ошибкой Invalid key type ru.CryptoPro.JCP.Key.GostPublicKey JCSP - 2.0.40035 CSP - 4.0.9963 / 4.0.9019 KC1 Как быть?
import java.lang.Math; // headers MUST be above the first class import java.security.KeyStore; import java.security.Provider; import java.security.Security; import java.util.*; import ru.CryptoPro.JCP.JCP; import ru.CryptoPro.JCSP.JCSP; import ru.CryptoPro.JCSP.KeyStore.KeyStoreConfig; import java.security.cert.X509Certificate; import ru.CryptoPro.JCP.JCP; import ru.CryptoPro.JCP.KeyStore.JCPPrivateKeyEntry; import ru.CryptoPro.JCP.tools.Encoder; import ru.CryptoPro.JCSP.JCSP; import ru.CryptoPro.JCP.Key.GostPublicKey; import java.security.*;
public class HelloWorldIvanko { public static final String ALIAS_2012_256 = "roslov190220287caa8f-a18f-45be-ade0-dde5142aeb78-copy"; public static final String PASSWORD_2012_256 = ""; public static final boolean askPinInWindow = true;
public static void log(String msg){ System.out.println(msg); }
public static void main(String[] args) throws Exception { Provider jcsp = new JCSP(); Security.removeProvider(JCSP.PROVIDER_NAME); Security.addProvider(jcsp);
signAndVerify(JCP.CRYPTOPRO_SIGN_2012_256_NAME, ALIAS_2012_256, PASSWORD_2012_256.toCharArray(), askPinInWindow); }
public static KeyStore getKS(String alias) throws Exception { for (Object storeT : KeyStoreConfig.getInstance().getNames()) { KeyStore store = KeyStore.getInstance(String.valueOf(storeT), JCSP.PROVIDER_NAME); store.load(null, null); Object c = (X509Certificate)store.getCertificate(alias); if(null != c){ log(String.valueOf(storeT)); return store; } } throw new Exception("no store found for " + alias); }
public static void signAndVerify(String signAlgName, String alias, char[] password, boolean askPinInWindow) throws Exception {
// Сообщение для подписи. final String message = "Message for signature";
KeyStore keyStore = getKS(alias); PrivateKey privateKey; PublicKey publicKey;
if (askPinInWindow) { privateKey = (PrivateKey) keyStore.getKey(alias, null); publicKey = keyStore.getCertificate(alias).getPublicKey(); } // if else {
KeyStore.ProtectionParameter protectedParam = new KeyStore.PasswordProtection(password);
JCPPrivateKeyEntry entry = (JCPPrivateKeyEntry) keyStore.getEntry(alias, protectedParam);
privateKey = entry.getPrivateKey(); publicKey = entry.getCertificate().getPublicKey(); }
Signature signer = Signature.getInstance( signAlgName, JCSP.PROVIDER_NAME);
signer.initSign(privateKey); signer.update(message.getBytes());
byte[] signature = signer.sign();
Encoder encoder = new Encoder(); System.out.println("Signature: " + encoder.encode(signature) + "\nfor Message: " + message);
Signature validator = Signature.getInstance( signAlgName, JCSP.PROVIDER_NAME); validator.initVerify(publicKey); validator.update(message.getBytes());
System.out.println("Signature verified: " + validator.verify(signature)); } }
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Здравствуйте. Проблема, скорее вмего, в том, что провайдер по умолчанию у вас jcp, а вы пытаетесь использовать в коде jcsp. Когда java декодирует открытый ключ, она берет любой первый провайдер из списка провайдеров, поддерживающий данный алгоритм открытого ключа, т.е. jcp. Задайте провайдер по умолчанию jcsp в панели управления jcp на вкладке "Алгоритмы". |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 18.11.2016(UTC) Сообщений: 61  Откуда: Москва Сказал(а) «Спасибо»: 6 раз Поблагодарили: 3 раз в 2 постах
|
Добрый день! Спасибо за ответ! Очень здорово, что так быстро) А можно это как-то в программном коде или из командной строки сделать? UPD!. Получилось! Цитата: Provider jcsp = new JCSP(); Security.removeProvider(JCSP.PROVIDER_NAME); Security.removeProvider(JCP.PROVIDER_NAME); Security.addProvider(jcsp);
Отредактировано пользователем 15 мая 2020 г. 10:10:08(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Лучше обновиться с 2.0.40035 до более новой сборки (последней сертифицированной), и потом в используемой java в ее java.security (<JRE>/lib/security/java.security)задать порядок провайдеров. Если вы используете JCSP, то он должен быть выше JCP, например: Код:
security.provider.1=sun.security.provider.Sun
security.provider.2=sun.security.rsa.SunRsaSign
security.provider.3=sun.security.ec.SunEC
security.provider.4=com.sun.net.ssl.internal.ssl.Provider
security.provider.5=com.sun.crypto.provider.SunJCE
security.provider.6=sun.security.jgss.SunProvider
security.provider.7=com.sun.security.sasl.Provider
security.provider.8=org.jcp.xml.dsig.internal.dom.XMLDSigRI
security.provider.9=sun.security.smartcardio.SunPCSC
security.provider.10=sun.security.mscapi.SunMSCAPI
security.provider.11=ru.CryptoPro.JCSP.JCSP
security.provider.12=ru.CryptoPro.JCP.JCP
security.provider.13=ru.CryptoPro.reprov.RevCheck
security.provider.14=ru.CryptoPro.Crypto.CryptoProvider
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 18.11.2016(UTC) Сообщений: 61  Откуда: Москва Сказал(а) «Спасибо»: 6 раз Поблагодарили: 3 раз в 2 постах
|
У нас настройка ПО содержит указание на тип используемого провайдера и не подразумевает изменения JRE.
Спасибо!
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close