Сообщение
  • Пожалуйста, прежде пройдите авторизацию
  • Пожалуйста, прежде пройдите авторизацию

softkey_jce_iola-2.2.jar - как JCE provider
(1 чел.) (1) гость
  • Страница:
  • 1

ТЕМА: softkey_jce_iola-2.2.jar - как JCE provider

softkey_jce_iola-2.2.jar - как JCE provider 5 года, 4 мес. назад #957

  • vfigurov
  • Осваиваюсь на форуме
  • Постов: 20
  • Репутация: 0
Здравствуйте!

У меня подозрение на баг в крипто-провайдере "softkey_jce". Детали - ниже:

В ходе создания службы, проставляющей ЭЦП на всех исходящих запросах всех внутренних клиентов ко внешним вебСервисам возникла проблема совместимости при использовании GOST3410 сертификата и ORACLE Service Bus, исполняется под Веблоджик 10.3.6

SoftkeyJCE провайдер использовал стандартным путем:
- подключил как прописано в
docs.oracle.com/javase/6/docs/technotes/...l#ProviderInstalling
- дополнительно положил его же библиотеки в weblogic_domain/lib - согласно требованию от Веблоджика, как прописано в
docs.oracle.com/cd/E28280_01/web.1111/e13707/ssl.htm#SECMG400


Были перепробованы несколько версий JCE провайдера от "софткей", начиная с 2009 и заканчивая 2013.12.18 - результат одинаково отрицательный, за мелкими ньюансами:
-- различие в имени алгоритма одного и того же сертификата (то EC, то ECGOST3410, то ECGOST34110, последняя версия JCE IOLA от 18 дек 2013 г. криптоАлгоритм называет "ECGOST34310")

Если SoftkeyJCE provider подключать в JRE_HOME не первым провайдером (провайдер по умолчанию), то при попытке создания ЭЦП сертификатом ГОСТ получаю ошибку в Сервисной Шине
"Unsupported algorithm: ECGOST34310"


Если же SoftkeyJCE provider подключить в JRE_HOME как дефолтный провайдер (1-ым в списке всех провайдеров), то получаю ошибку сразу при старте любого Веблдожик сервера:
<Apr 23, 2014 11:37:51 AM ALMT> <Critical> <WebLogicServer> <BEA-000386> <Server subsystem failed. Reason: java.lang.StackOverflowError
java.lang.StackOverflowError
	at kz.nitec.iola.pcsc.generators.AKSecureRandom.<init>(AKSecureRandom.java:14)
	at sun.reflect.GeneratedConstructorAccessor9.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	at java.lang.Class.newInstance0(Class.java:355)
	Truncated. see log file for complete stacktrace
> 



Кстати, если использовать RSA сертификат - проблема не возникает.

Re: softkey_jce_iola-2.2.jar - как JCE provider 5 года, 3 мес. назад #962

  • vfigurov
  • Осваиваюсь на форуме
  • Постов: 20
  • Репутация: 0
замена на более свежую сборку JCE провайдера (softkey_jce_iola-2.3_162.jar из SDK_KNCA_20140409.zip) ничего не изменила...

Re: softkey_jce_iola-2.2.jar - как JCE provider 5 года, 3 мес. назад #967

  • vfigurov
  • Осваиваюсь на форуме
  • Постов: 20
  • Репутация: 0
Напоминаю об актуальности проблемы.

Re: softkey_jce_iola-2.2.jar - как JCE provider 5 года, 3 мес. назад #970

  • ololo
  • Живу я здесь
  • Постов: 464
  • Репутация: 57
здравствуйте!
статически регистрирую библиотеку, вызываю из приложения, и никаких ошибок не получаю.
правда через веблоджик не пробовал, но думаю результат должен быть такой же.
Вы в lib ложили библиотеки xml-sec и commons-logging?
Вышлите полный stacktrace.
gg wp

Re: softkey_jce_iola-2.2.jar - как JCE provider 5 года, 3 мес. назад #975

  • vfigurov
  • Осваиваюсь на форуме
  • Постов: 20
  • Репутация: 0
Здравствуйте ololo,

Давайте уточнимся: "статически регистрирую библиотеку" - означает следующие действия:
1) ложим библиотеки JCE провайдера
- softkey_jce_iola-2.3_162.jar,
- commons-logging-1.1.1.jar,
- xmlsec-1.4.4.jar
в папку "JRE_HOME"\lib\ext

2)в файле %JRE_HOME%\lib\security\java.security добавляем новый JCE провайдер, куда-нибудь в конец списка имеющихся, например: "security.provider.9=kz.iola.jce.provider.IolaProvider

При такой последовательности действительно, любая реализация softkey JCE провайдера работает, начиная с версий 2009 года, даже дополнительно подключать ничего не надо в CLASSPATH приложения - алгоритм подписи прекрасно считывается из самого сертификата:
...
KeyStore keyStore = KeyStore.getInstance( "PKCS12");
FileInputStream certFileInputStream = new FileInputStream("C:/certs/keys_gost.p12");
keyStore.load(certFileInputStream, "123456".toCharArray());
X509Certificate certificate = (X509Certificate) keyStore.getCertificateChain("myAlias")[0];
PrivateKey privateKey = (PrivateKey) keyStore.getKey("myAlias", "123456".toCharArray());
String algoritmName = privateKey.getAlgorithm();
Signature signature = Signature.getInstance(algoritmName);

signature.initSign(privateKey);
signature.update(dataForSign);
byte[] sign = signature.sign();
...

Но с веблоджик проблемы начинаются сразу, при его запуске (если уже прописан вышеуказанным способом softkey JCE провайдер - раз, положены библиотеки в библиотеки Weblogic домена - два) - веблоджик начинает очень нестабильно запускаться на 64bit java: успешно 1 раз из 10-15 попыток. (пробовал запуск в 32bit среде - проблема не воспроизводится). Для тестов это еще терпимо, но для промышленной эксплуатации не годится...
Если же softkey JCE провайдер поставить как провайдер по умолчанию (т.е. с индексом [1] в java.security), то и в 64bit и в 32bit java Веблоджик ругается на:
64bit
<Apr 23, 2014 11:37:51 AM ALMT> <Critical> <WebLogicServer> <BEA-000386> <Server subsystem failed. Reason: 
java.lang.StackOverflowError
	at kz.nitec.iola.pcsc.generators.AKSecureRandom.<init>(AKSecureRandom.java:14)

(полный стек ошибки приведен в начальном моем запросе)

32bit
<May 4, 2014 7:36:15 PM ALMT> <Critical> <WebLogicServer> <MYHOST> <ServiceBusSamples> <main> <<WLS Kernel>> <> <> <1399210575701> <BEA-000386> <Server subsystem failed. Reason: java.lang.StackOverflowError
java.lang.StackOverflowError
	at sun.reflect.GeneratedConstructorAccessor8.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	at java.lang.Class.newInstance0(Class.java:355)
	at java.lang.Class.newInstance(Class.java:308)
	at java.security.Provider$Service.newInstance(Provider.java:1221)
	at sun.security.jca.GetInstance.getInstance(GetInstance.java:220)
	at sun.security.jca.GetInstance.getInstance(GetInstance.java:147)
	at java.security.SecureRandom.getInstance(SecureRandom.java:254)
	at java.security.SecureRandom.getDefaultPRNG(SecureRandom.java:176)
	at java.security.SecureRandom.<init>(SecureRandom.java:133)
	at kz.nitec.iola.pcsc.generators.AKSecureRandom.engineNextBytes(AKSecureRandom.java:38)
	at java.security.SecureRandom.nextBytes(SecureRandom.java:433)
	at kz.nitec.iola.pcsc.generators.AKSecureRandom.engineNextBytes(AKSecureRandom.java:39)
	at java.security.SecureRandom.nextBytes(SecureRandom.java:433)
	at kz.nitec.iola.pcsc.generators.AKSecureRandom.engineNextBytes(AKSecureRandom.java:39)



Это Вы можете проверить легко, никаких приложений под веблоджик даже создавать не надо, просто установите из дистрибутива Weblogic 10.3.6, убедитесь что он запускается нормально, затем подключите в JRE softkey IOLA провайдер. Дистрибутив Weblogic для 32bit можно взять там: download.oracle.com/otn/nt/middleware/11...138-10.3.6-win32.exe
  • Страница:
  • 1
FaLang translation system by Faboba