Статус: Участник
Группы: Участники
Зарегистрирован: 20.04.2020(UTC) Сообщений: 14 
|
Нужны ли какие-то особые настройки для работы jcsp на сервере? Wildfly 19 кидает ошибку в примере на 3 строчке. Код из samples/xmlSign/CryptXml. Код:if (x509Certificate.getPublicKey().getAlgorithm().equals(GOST_EL_2012_256_NAME) || x509Certificate.getPublicKey().getAlgorithm().equals(GOST_EL_2012_512_NAME)) {
cryptParamsSpec = CryptParamsSpec.getInstance(CryptParamsSpec.Rosstandart_TC26_Z);
keyGenerator.init(cryptParamsSpec); // ошибка java.security.InvalidAlgorithmParameterException: Unable create session key with specified parameters
}
java-csp-5.0.40714 + java 8 (liberica jdk)
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Здравствуйте. Можете показать keyGenerator? Весь стек ошибки? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 20.04.2020(UTC) Сообщений: 14 
|
Автор: Евгений Афанасьев  Здравствуйте. Можете показать keyGenerator? Весь стек ошибки? Код: // Создание случайного сессионного ключа
final KeyGenerator keyGenerator = KeyGenerator.getInstance("GOST28147");
CryptParamsSpec cryptParamsSpec = null;
if (x509Certificate.getPublicKey().getAlgorithm().equals(GOST_EL_2012_256_NAME) || x509Certificate.getPublicKey().getAlgorithm().equals(GOST_EL_2012_512_NAME)) {
cryptParamsSpec = CryptParamsSpec.getInstance(CryptParamsSpec.Rosstandart_TC26_Z);
keyGenerator.init(cryptParamsSpec);
}
final SecretKey secretKey = keyGenerator.generateKey();
Ошибка:
2020-04-23 13:31:38,282 WARNING [ru.CryptoPro.JCP.tools.JCPLogger] (default task-1) ERROR: java.security.InvalidAlgorithmParameterException: Unable create session key with specified parameters at ru.CryptoPro.Crypto.Key.GostKeyGenerator.engineInit(Unknown Source) at javax.crypto.KeyGenerator.init(KeyGenerator.java:454) at javax.crypto.KeyGenerator.init(KeyGenerator.java:430) at su.medsoft.mis.sicklist.eln.utils.CryptXml.encryptXml(CryptXml.java:61) at su.medsoft.mis.sicklist.services.FssService.sendRequestToFss(FssService.java:198) at su.medsoft.mis.sicklist.services.FssService.sendData(FssService.java:84) at su.medsoft.mis.sicklist.services.FssService$Proxy$_$$_WeldClientProxy.sendData(Unknown Source) at su.medsoft.mis.sicklist.services.ElnService.sendDataToFss(ElnService.java:165) at su.medsoft.mis.sicklist.services.ElnService.signSicklistXml(ElnService.java:60) at su.medsoft.mis.sicklist.services.ElnService$Proxy$_$$_WeldClientProxy.signSicklistXml(Unknown Source) at su.medsoft.mis.sicklist.resources.ElnResource.signSicklistXml(ElnResource.java:38) at su.medsoft.mis.sicklist.resources.ElnResource$Proxy$_$$_WeldClientProxy.signSicklistXml(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:138) at org.jboss.resteasy.core.ResourceMethodInvoker.internalInvokeOnTarget(ResourceMethodInvoker.java:526) at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTargetAfterFilter(ResourceMethodInvoker.java:415) at org.jboss.resteasy.core.ResourceMethodInvoker.lambda$invokeOnTarget$0(ResourceMethodInvoker.java:376) at org.jboss.resteasy.core.interception.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:356) at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:378) at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:347) at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:320) at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:440) at org.jboss.resteasy.core.SynchronousDispatcher.lambda$invoke$4(SynchronousDispatcher.java:229) at org.jboss.resteasy.core.SynchronousDispatcher.lambda$preprocess$0(SynchronousDispatcher.java:135) at org.jboss.resteasy.core.interception.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:356) at org.jboss.resteasy.core.SynchronousDispatcher.preprocess(SynchronousDispatcher.java:138) at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:215) at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:227) at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56) at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51) at javax.servlet.http.HttpServlet.service(HttpServlet.java:590) at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129) at io.opentracing.contrib.jaxrs2.server.SpanFinishingFilter.doFilter(SpanFinishingFilter.java:52) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84) at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68) at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68) at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:132) at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64) at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60) at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77) at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50) at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at org.wildfly.extension.undertow.deployment.GlobalRequestControllerHandler.handleRequest(GlobalRequestControllerHandler.java:68) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:269) at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:78) at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:133) at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:130) at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48) at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) at org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105) at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1541) at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1541) at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1541) at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1541) at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:249) at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:78) at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:99) at io.undertow.server.Connectors.executeRootHandler(Connectors.java:376) at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830) at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35) at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1982) at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486) at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377) at java.lang.Thread.run(Thread.java:748)
2020-04-23 13:31:39,102 WARNING [ru.CryptoPro.JCSP.JCSPLogger] (default task-1) ERROR: java.security.InvalidAlgorithmParameterException: Unable create session key with specified parameters at ru.CryptoPro.JCSP.Key.GostKeyGenerator.engineInit(Unknown Source) at javax.crypto.KeyGenerator.init(KeyGenerator.java:454) at javax.crypto.KeyGenerator.init(KeyGenerator.java:430) at su.medsoft.mis.sicklist.eln.utils.CryptXml.encryptXml(CryptXml.java:61) at su.medsoft.mis.sicklist.services.FssService.sendRequestToFss(FssService.java:198) at su.medsoft.mis.sicklist.services.FssService.sendData(FssService.java:84) at su.medsoft.mis.sicklist.services.FssService$Proxy$_$$_WeldClientProxy.sendData(Unknown Source) at su.medsoft.mis.sicklist.services.ElnService.sendDataToFss(ElnService.java:165) at su.medsoft.mis.sicklist.services.ElnService.signSicklistXml(ElnService.java:60) at su.medsoft.mis.sicklist.services.ElnService$Proxy$_$$_WeldClientProxy.signSicklistXml(Unknown Source) at su.medsoft.mis.sicklist.resources.ElnResource.signSicklistXml(ElnResource.java:38) at su.medsoft.mis.sicklist.resources.ElnResource$Proxy$_$$_WeldClientProxy.signSicklistXml(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:138) at org.jboss.resteasy.core.ResourceMethodInvoker.internalInvokeOnTarget(ResourceMethodInvoker.java:526) at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTargetAfterFilter(ResourceMethodInvoker.java:415) at org.jboss.resteasy.core.ResourceMethodInvoker.lambda$invokeOnTarget$0(ResourceMethodInvoker.java:376) at org.jboss.resteasy.core.interception.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:356) at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:378) at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:347) at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:320) at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:440) at org.jboss.resteasy.core.SynchronousDispatcher.lambda$invoke$4(SynchronousDispatcher.java:229) at org.jboss.resteasy.core.SynchronousDispatcher.lambda$preprocess$0(SynchronousDispatcher.java:135) at org.jboss.resteasy.core.interception.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:356) at org.jboss.resteasy.core.SynchronousDispatcher.preprocess(SynchronousDispatcher.java:138) at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:215) at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:227) at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56) at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51) at javax.servlet.http.HttpServlet.service(HttpServlet.java:590) at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129) at io.opentracing.contrib.jaxrs2.server.SpanFinishingFilter.doFilter(SpanFinishingFilter.java:52) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84) at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68) at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68) at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:132) at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64) at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60) at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77) at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50) at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at org.wildfly.extension.undertow.deployment.GlobalRequestControllerHandler.handleRequest(GlobalRequestControllerHandler.java:68) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:269) at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:78) at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:133) at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:130) at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48) at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) at org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105) at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1541) at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1541) at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1541) at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1541) at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:249) at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:78) at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:99) at io.undertow.server.Connectors.executeRootHandler(Connectors.java:376) at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830) at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35) at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1982) at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486) at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377) at java.lang.Thread.run(Thread.java:748)
Отредактировано пользователем 23 апреля 2020 г. 13:46:01(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Здравствуйте. Ошибка не должна возникать. Может, у вас разные экземпляры классов загружены разными class loader'ами (несколько одинаковых jar)? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 20.04.2020(UTC) Сообщений: 14 
|
Автор: Евгений Афанасьев  Здравствуйте. Ошибка не должна возникать. Может, у вас разные экземпляры классов загружены разными class loader'ами (несколько одинаковых jar)? Какие классы вы имеете ввиду? KeyGenerator, CryptParamsSpec?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Да. KeyGenerator, CryptParamsSpec, CryptParamsInterface, AlgIdInterface - не вышло случайно так, что у вас несколько экземпляров JCP задействовано, в приложении и в lib/ext, например. В генераторах имеются проверки вида instanceof на соответствие параметров. Я бы еще рекомендовал у *Generator указывать все-таки конкретный провайдер (JCSP.PROVIDER_NAME в случае JCSP, CryptoProvider.PROIDER_NAME в случае JCryptoP), допусим: Код:
final KeyGenerator keyGenerator = KeyGenerator.getInstance("GOST28147", JCSP.PROVIDER_NAME); // если JCSP
Отредактировано пользователем 23 апреля 2020 г. 18:31:19(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 20.04.2020(UTC) Сообщений: 14 
|
Автор: Евгений Афанасьев  Да. KeyGenerator, CryptParamsSpec, CryptParamsInterface, AlgIdInterface - не вышло случайно так, что у вас несколько экземпляров JCP задействовано, в приложении и в lib/ext, например. В генераторах имеются проверки вида instanceof на соответствие параметров. Я бы еще рекомендовал у *Generator указывать все-таки конкретный провайдер (JCSP.PROVIDER_NAME в случае JCSP, CryptoProvider.PROIDER_NAME в случае JCryptoP), допусим: Код:
final KeyGenerator keyGenerator = KeyGenerator.getInstance("GOST28147", JCSP.PROVIDER_NAME); // если JCSP
Нет, несколько экземпляров нигде нет. Все что я сделал: установил jcp-2.0.40035, java-csp-5.0.40714, crypto pro csp, добавил в gradle implementation fileTree(include: ['*.jar'], dir: 'C:\\Program Files\\BellSoft\\LibericaJDK-8\\jre\\lib\\ext'), чтобы собрать проект (туда же в jre\lib\ext положил xmlSec), wildFly java.home на этой же jdk. Вот код:
Код: public static Document encryptXml(String xmlString) throws Exception {
String certificate = "C:\\FSS_TEST_CERT_2020_GOST2012.cer";
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
FileInputStream inStream = new FileInputStream(certificate);
X509Certificate x509Certificate = (X509Certificate) certificateFactory.generateCertificate(inStream);
inStream.close();
if (x509Certificate == null) {
throw new RuntimeException("Сертификат не найден.");
}
XmlInit.init();
Document document = convertStringToXMLDocument(xmlString);
// Создание случайного сессионного ключа
CryptParamsSpec cryptParamsSpec = null;
if (x509Certificate.getPublicKey().getAlgorithm().equals(GOST_EL_2012_256_NAME) || x509Certificate.getPublicKey().getAlgorithm().equals(GOST_EL_2012_512_NAME)) {
cryptParamsSpec = CryptParamsSpec.getInstance(CryptParamsSpec.Rosstandart_TC26_Z);
}
KeyGenerator keyGenerator = KeyGenerator.getInstance("GOST28147", JCSP.PROVIDER_NAME);
if (cryptParamsSpec != null) {
keyGenerator.init(cryptParamsSpec);
}
SecretKey secretKey = keyGenerator.generateKey();
// Шифрование сессионного ключа
EncryptedKey encryptedKey = wrapKey(document, secretKey, x509Certificate);
// Создаем шифратор в режиме зашифрования.
Element element = document.getDocumentElement();
XMLCipher xmlCipher = XMLCipher.getInstance(Consts.URI_GOST_CIPHER);
xmlCipher.init(XMLCipher.ENCRYPT_MODE, secretKey);
// Добавляем шифрованный ключ
EncryptedData encryptedData = xmlCipher.getEncryptedData();
KeyInfo keyInfo = new KeyInfo(document);
keyInfo.add(encryptedKey);
encryptedData.setKeyInfo(keyInfo);
// Шифрование документа
xmlCipher.doFinal(document, element, false);
return document;
}
/**
* Шифрование сессионного ключа secretKey и создание encryptedKey с сертификатом.
*
* @param document xml документ
* @param secretKey случайный сессионный ключ.
* @param x509Certificate сертификат
* @return зашифрованный ключ
* @throws Exception ошибки шифрования
*/
private static EncryptedKey wrapKey(Document document, SecretKey secretKey, X509Certificate x509Certificate) throws Exception {
String transformAlg = Consts.URI_GOST_TRANSPORT;
String keyAlgName = x509Certificate.getPublicKey().getAlgorithm();
if (keyAlgName.equalsIgnoreCase(JCP.GOST_EL_2012_256_NAME) || keyAlgName.equalsIgnoreCase(JCP.GOST_DH_2012_256_NAME)) {
transformAlg = Consts.URI_GOST_TRANSPORT_GOST_2012_256;
} else if (keyAlgName.equalsIgnoreCase(JCP.GOST_EL_2012_512_NAME) || keyAlgName.equalsIgnoreCase(JCP.GOST_DH_2012_512_NAME)) {
transformAlg = Consts.URI_GOST_TRANSPORT_GOST_2012_512;
}
XMLCipher keyCipher = XMLCipher.getInstance(transformAlg);
keyCipher.init(XMLCipher.WRAP_MODE, x509Certificate.getPublicKey());
KeyInfo keyInfo = new KeyInfo(document);
X509Data x509Data = new X509Data(document);
x509Data.addCertificate(x509Certificate);
keyInfo.add(x509Data);
EncryptedKey encryptedKey = keyCipher.encryptKey(document, secretKey);
encryptedKey.setKeyInfo(keyInfo);
return encryptedKey;
}
Интересно что на клиенте этот код работает. Отредактировано пользователем 24 апреля 2020 г. 9:48:46(UTC)
| Причина: Дополнение.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Автор: akrtkv  установил jcp-2.0.40035, java-csp-5.0.40714 Как вы установили 2 дистрибутива? Первый jcp, второй - jcsp с jcp внутри. В зависимости от того, что вам нужно, надо поставить либо первый (jcp, если нужен jcp), либо второй (jcsp, если нужен jcsp). Так как в составе jcsp есть jcp, то, если вам нужен jcp, можно его, в принципе, поставить и из jcsp-дистрибутива (не ставя jcsp). |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 20.04.2020(UTC) Сообщений: 14 
|
Автор: Евгений Афанасьев  Автор: akrtkv  установил jcp-2.0.40035, java-csp-5.0.40714 Как вы установили 2 дистрибутива? Первый jcp, второй - jcsp с jcp внутри. В зависимости от того, что вам нужно, надо поставить либо первый (jcp, если нужен jcp), либо второй (jcsp, если нужен jcsp). Так как в составе jcsp есть jcp, то, если вам нужен jcp, можно его, в принципе, поставить и из jcsp-дистрибутива (не ставя jcsp). Да, я извиняюсь, ставил java-csp-5.0.40714 и Crypto Pro 5.0.11455. Есть какие-то еще варианты решения?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 20.04.2020(UTC) Сообщений: 14 
|
Здравствуйте! Получилось настроить сервер, чтобы он брал зависимости из jre\lib\ext добавлением в проект jboss-deployment-structure.xml
Код:<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<deployment>
<dependencies>
<system export="true">
<paths>
<path name="ru/CryptoPro/JCSP"/>
<path name="ru/CryptoPro/JCP"/>
<path name="ru/CryptoPro/JCPxml"/>
<path name="ru/CryptoPro/JCP/params"/>
<path name="ru/CryptoPro/JCP/tools"/>
<path name="ru/CryptoPro/JCP/KeyStore/HDImage"/>
<path name="org/apache/xml/security"/>
<path name="org/apache/xml/security/c14n"/>
<path name="org/apache/xml/security/encryption"/>
<path name="org/apache/xml/security/keys"/>
<path name="org/apache/xml/security/keys/content"/>
</paths>
</system>
</dependencies>
</deployment>
</jboss-deployment-structure>
Но падает на EncryptedKey encryptedKey = keyCipher.encryptKey(doc, sessionKey); ERROR: java.security.InvalidKeyException: Invalid key type. Пример кода:
Код:public String encryptXml() {
try {
byte[] decodedCert = Base64.getDecoder().decode(getFssCertificateEncoded().getBytes());
InputStream is = new ByteArrayInputStream(decodedCert);
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
X509Certificate fssCertificate = (X509Certificate) certificateFactory.generateCertificate(is);
Document doc = Converter.convertStringToXMLDocument(soapMessageStr);
// Создание случайного сессионного ключа.
KeyGenerator kg = KeyGenerator.getInstance(JCSP.GOST_CIPHER_NAME, JCSP.PROVIDER_NAME);
CryptParamsSpec spec = CryptParamsSpec.getInstance(CryptParamsSpec.Rosstandart_TC26_Z);
kg.init(spec);
SecretKey sessionKey = kg.generateKey();
// Зашифрование сессионного ключа.
EncryptedKey encryptedKey = wrapKey(doc, sessionKey, fssCertificate);
// Зашифрование документа
Element element = doc.getDocumentElement();
XMLCipher xmlCipher = XMLCipher.getInstance(Consts.URI_GOST_CIPHER);
xmlCipher.init(XMLCipher.ENCRYPT_MODE, sessionKey);
// Добавляем шифрованный ключ.
EncryptedData encryptedData = xmlCipher.getEncryptedData();
KeyInfo keyInfo = new KeyInfo(doc);
keyInfo.add(encryptedKey);
encryptedData.setKeyInfo(keyInfo);
// Зашифрование документа
xmlCipher.doFinal(doc, element, false);
return Converter.convertDocumentToString(doc);
} catch (Exception ex) {
throw new RuntimeException(ex);
}
}
public EncryptedKey wrapKey(Document doc, SecretKey sessionKey, X509Certificate fssCertificate) throws Exception {
XMLCipher keyCipher = XMLCipher.getInstance(Consts.URI_GOST_TRANSPORT);
keyCipher.init(XMLCipher.WRAP_MODE, fssCertificate.getPublicKey());
// Создание KeyInfo с сертификатом
KeyInfo keyInfo = new KeyInfo(doc);
X509Data x509data = new X509Data(doc);
x509data.addCertificate(fssCertificate);
keyInfo.add(x509data);
// Зашифрование ключа
EncryptedKey encryptedKey = keyCipher.encryptKey(doc, sessionKey);
encryptedKey.setKeyInfo(keyInfo);
return encryptedKey;
}
Есть мнения что можно поправить?
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close