Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline bearchik  
#1 Оставлено : 15 сентября 2017 г. 17:30:40(UTC)
bearchik

Статус: Новичок

Группы: Участники
Зарегистрирован: 08.09.2017(UTC)
Сообщений: 2

Собственно есть DSS поднятый полностью на сайте с гост алгоритмами. Пытаюсь подключится используя примеры - вываливается exception:
Цитата:
Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: ID4184: The EncryptingCredentials provided in the SecurityTokenDescriptor must not be null if Scope.TokenEncryptionRequired is set to true. This can be caused by the Scope specifying an unsupported encryption key type, or by the incoming RequestSecurityToken message containing an unsupported EncryptionAlgorithm. Override CreateSecurityTokenDescriptor if you need to support algorithms other than AES 256.


Гугл, яндекс, дакдакго ничего не дал по этому поводу, куда копать уже не знаю.
CryptoPro JCP и TLS установлен и без проблем подключается к самому сайту, а вот насколько я понимаю SOAP запрос подписать не может.
Если переключаю на тестовый сайт dss.cryptopro.ru без гост шифрования(с обычными ssl) - все работает без проблем.
Код имеет следующий вид:
Код:
public class MainClass {

    public static void main(String[] args) {

        Security.setProperty("ssl.SocketFactory.provider", "ru.CryptoPro.ssl.SSLSocketFactoryImpl");

        System.setProperty("javax.net.ssl.keyStoreType", "HDImageStore");
        System.setProperty("javax.net.ssl.trustStoreType", "HDImageStore");
        System.setProperty("javax.net.ssl.trustStore", "E:\\truststore.store");
        System.setProperty("javax.net.ssl.trustStorePassword", "password");
        System.setProperty("com.sun.security.enableCRLDP", "true");
        System.setProperty("com.ibm.security.enableCRLDP", "true");

        DefaultSTSIssuedTokenConfiguration stsConfig = new DefaultSTSIssuedTokenConfiguration(
                STSIssuedTokenConfiguration.PROTOCOL_13,
                "https://dss.testserver.test/STS/Active.svc/username/transport",
                "http://dss.testserver.test/STS/Active.svc/mex");


        stsConfig.getOtherOptions().put(BindingProvider.USERNAME_PROPERTY,"testuser");
        stsConfig.getOtherOptions().put(BindingProvider.PASSWORD_PROPERTY,"password");


        try {
            SignService srv = new SignService(new URL("http://dss.testserver.test/SignServer/SignService.svc?wsdl"));
            Iterator<QName> ports = srv.getPorts();
            ISignService client = null;
            while (ports.hasNext()) {
                QName portName = ports.next();
                ISignService p = srv.getPort(portName, ISignService.class, new WebServiceFeature[] {
                        new STSIssuedTokenFeature(stsConfig)
                });
                String en = (String)((BindingProvider)p).getRequestContext().get(BindingProvider.ENDPOINT_ADDRESS_PROPERTY);
                if(en.equals("https://dss.testserver.test/SignServer/SignServiceR.svc/issuedtoken/transport/nosc")) {
                    client = p;
                    break;
                }
            }

            if (client == null) {
                System.out.println("Cannot find endpoint in service WSDL");
            }

            ArrayOfDSSCertificate certs = client.getCertificates(); // здесь собственно падает в ошибку

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (ISignServiceGetCertificatesDssFaultFaultFaultMessage iSignServiceGetCertificatesDssFaultFaultFaultMessage) {
            iSignServiceGetCertificatesDssFaultFaultFaultMessage.printStackTrace();
        }
    }

}


Полный стек ошибки:
Цитата:
Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: ID4184: The EncryptingCredentials provided in the SecurityTokenDescriptor must not be null if Scope.TokenEncryptionRequired is set to true. This can be caused by the Scope specifying an unsupported encryption key type, or by the incoming RequestSecurityToken message containing an unsupported EncryptionAlgorithm. Override CreateSecurityTokenDescriptor if you need to support algorithms other than AES 256.
at com.sun.xml.ws.fault.SOAP12Fault.getProtocolException(SOAP12Fault.java:229)
at com.sun.xml.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:126)
at com.sun.xml.ws.client.dispatch.DispatchImpl.doInvoke(DispatchImpl.java:199)
at com.sun.xml.ws.client.dispatch.DispatchImpl.invoke(DispatchImpl.java:218)
at com.sun.xml.ws.security.trust.impl.TrustPluginImpl.invokeRST(TrustPluginImpl.java:628)
at com.sun.xml.ws.security.trust.impl.TrustPluginImpl.process(TrustPluginImpl.java:174)
at com.sun.xml.ws.security.trust.impl.client.STSIssuedTokenProviderImpl.getIssuedTokenContext(STSIssuedTokenProviderImpl.java:144)
at com.sun.xml.ws.security.trust.impl.client.STSIssuedTokenProviderImpl.issue(STSIssuedTokenProviderImpl.java:74)
at com.sun.xml.ws.api.security.trust.client.IssuedTokenManager.getIssuedToken(IssuedTokenManager.java:83)
at com.sun.xml.wss.jaxws.impl.SecurityClientTube.invokeTrustPlugin(SecurityClientTube.java:685)
at com.sun.xml.wss.jaxws.impl.SecurityClientTube.processClientRequestPacket(SecurityClientTube.java:281)
at com.sun.xml.wss.jaxws.impl.SecurityClientTube.processRequest(SecurityClientTube.java:247)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:641)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:600)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:585)
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:482)
at com.sun.xml.ws.client.Stub.process(Stub.java:323)
at com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:161)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:113)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:93)
at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:144)
at com.sun.proxy.$Proxy46.getCertificates(Unknown Source)
at MainClass.main(MainClass.java:80)
Offline khomenko  
#2 Оставлено : 19 сентября 2017 г. 12:14:54(UTC)
Михаил Хоменко

Статус: Активный участник

Группы: Администраторы, Участники
Зарегистрирован: 28.04.2010(UTC)
Сообщений: 139
Мужчина
Откуда: Крипто-Про

Поблагодарили: 15 раз в 14 постах
На данный момент DSS предоставляет более простой для интеграции интерфейс REST.
Рекомендуем использовать его.

Указанная ошибка приходит с Центра Идентификации DSS. Необходимо проверить его настройки:
убедиться что для проверяющей стороны "Сервиса Подписи" задан сертификат шифрования.
см. Рук-во разработчика командлеты *-DssRelyingPartyTrust
Offline bearchik  
#3 Оставлено : 19 сентября 2017 г. 17:20:37(UTC)
bearchik

Статус: Новичок

Группы: Участники
Зарегистрирован: 08.09.2017(UTC)
Сообщений: 2

Спасибо за ответ.

Сертификат шифрования был задан.
PS C:\Users\Administrator> Get-DssRelyingPartyTrust -DisplayName sts -Id 3

ID Свойства Статус


3 Отображаемое имя проверяющей стороны: SignServer Активна
Описание проверяющей стороны:
Шифрование маркера безопасности: Включено
Делегирование: Отключено
URL-адрес администрирования: Администрирование отключено
URL-адрес сервисного канала: https://dss.testserver.t...ce.svc/transactiontokens
Поддержка сервисного канала: Включена
Идентификаторы проверяющей стороны:
http://dss.testserver.te...gnService.svc/federation
http://dss.testserver.te...vice.svc/federation/nosc
http://dss.testserver.te...nService.svc/issuedtoken
http://dss.testserver.te...er/SignService.svc/token
http://dss.testserver.te...ceR.svc/issuedtoken/nosc
http://dss.testserver.te...nServiceR.svc/token/nosc
https://dss.testserver.test/SignServer/rest
https://dss.testserver.test/SignServer/rest/api
https://dss.testserver.t...svc/federation/transport
https://dss.testserver.t...ederation/transport/nosc
https://dss.testserver.t...vc/issuedtoken/transport
https://dss.testserver.t...suedtoken/transport/cert
https://dss.testserver.t...oken/transport/nosc/cert
https://dss.testserver.t...vice.svc/token/transport
https://dss.testserver.t...ce.svc/transactiontokens
https://dss.testserver.t...suedtoken/transport/nosc
https://dss.testserver.t...svc/token/transport/nosc


Сертификат шифрования маркера безопасности:


Параметр Значение

Субъект CN=dss.testserver.test


Издатель CN=dss.testserver.test

Отпечаток 8AB8F02F4B602BD6151CE980BE8382605F17C1B5


Срок действия 12.07.2018
Offline marrow  
#4 Оставлено : 25 сентября 2017 г. 10:40:03(UTC)
marrow

Статус: Активный участник

Группы: Участники
Зарегистрирован: 14.06.2016(UTC)
Сообщений: 56
Мужчина
Российская Федерация

Сказал «Спасибо»: 4 раз
Поблагодарили: 3 раз в 3 постах
День добрый.
Через интерфейс REST, необходимо для регистрации пользователя присвоить Client_ID. Пока не понимаю где получить Client_ID.
В документации написано, что допустимое значение данного параметра сохраняется в ЦИ на этапе регистрации клиента. Хочу сначала понять логику. Например сделали регистрацию клиента через Web-интерфейс, Client ID сейчас возможно посмотреть в ЦИ (например в БД), как он выглядит?
Offline khomenko  
#5 Оставлено : 25 сентября 2017 г. 14:55:57(UTC)
Михаил Хоменко

Статус: Активный участник

Группы: Администраторы, Участники
Зарегистрирован: 28.04.2010(UTC)
Сообщений: 139
Мужчина
Откуда: Крипто-Про

Поблагодарили: 15 раз в 14 постах
Добрый день,

Client_ID задаёт администратор. См. рук-во администратора, командлеты *-DssClient
Offline marrow  
#6 Оставлено : 26 сентября 2017 г. 12:23:26(UTC)
marrow

Статус: Активный участник

Группы: Участники
Зарегистрирован: 14.06.2016(UTC)
Сообщений: 56
Мужчина
Российская Федерация

Сказал «Спасибо»: 4 раз
Поблагодарили: 3 раз в 3 постах
Есть ли возможность узнать Client_ID от вашего тестового DSS (dss.cryptopro.ru) и сделать запрос?
Offline marrow  
#7 Оставлено : 27 сентября 2017 г. 9:58:56(UTC)
marrow

Статус: Активный участник

Группы: Участники
Зарегистрирован: 14.06.2016(UTC)
Сообщений: 56
Мужчина
Российская Федерация

Сказал «Спасибо»: 4 раз
Поблагодарили: 3 раз в 3 постах
Добрый день.

Хочу получить маркер доступа через интерфейс REST.

Выполняю запрос:
POST https://dss01.nucrf.ru/STS/oauth/token HTTP/1.1
Host: dss01.nucrf.ru
Accept: application/json
Content-Type: application/x-www-form-urlencoded
Authorization: Basic dXNlcjcwMDoxMjM0NQ==
Cache-Control: no-cache
Postman-Token: eea13afa-e267-7439-9b04-c57044d057f9

grant_type=password&client_id=test-oauth-client&scope=dss&username=user700&password=12345&resource=test


Приходит ответ с ошибкой - {"error":"invalid_client"}

Client_ID в DSS прописан правильный:

ClientId : test-oauth-client
ClientName :
Description :
Enabled : True
Flows : {AuthorizationCode}
ClientSecrets : {}
RedirectUris : {urn:ietf:wg:oauth:2.0:oob:auto}
Type : Public
AccessTokenType : Jwt
AuthorizationCodeLifetime : 300
AccessTokenLifetime : 300
IdentityTokenLifetime : 300


В журнале DSS (в STS'e) ошибка - Instance Unique Identifier: 1/STS] Source: ClientValidator Message: Client with id user700 is not registered..

На самом деле Пользователь зарегистрирован в DSS'e.
Offline marrow  
#8 Оставлено : 27 сентября 2017 г. 13:53:22(UTC)
marrow

Статус: Активный участник

Группы: Участники
Зарегистрирован: 14.06.2016(UTC)
Сообщений: 56
Мужчина
Российская Федерация

Сказал «Спасибо»: 4 раз
Поблагодарили: 3 раз в 3 постах
AllowedFlow пробовал как и ResourceOwner и ClientCredentials - без успешно.

Возможно ли у вас попросить пример Вашего Get-DSSClient (с dss.cryptopro.ru). И пример запроса обращающий по логину и паролю. Выполнял пример с документации - без успешно.

Так же не очень понятно в Руководство администратора Вы пишите, что параметр ClientCredentials не доступен, а в Руководство разработчика есть описание и примеры запроса и ответа - "Авторизации с использование учётных данных пользователя" Anxious

Отредактировано пользователем 27 сентября 2017 г. 14:23:16(UTC)  | Причина: Не указана

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.