Здравствуйте 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