Русгард ошибка при проверке безопасности сообщения

Произошла ошибка при проверке безопасности сообщения

когда я удаляю пользовательскую аутентификацию, служба работает без проблем. Я не могу понять, что я неправильно сконфигурировал в своей сети.конфиг. Любое понимание будет оценено.

Так сложилось исторически, что мы стали дилером компании RusGuard чуть ли не сразу после её образования. Причиной тому было то, что компания была основана бывшими сотрудниками другой компании – Legos, с которой мы довольно плотно работали. Дилерами стали, но сотрудничество как-то не задалось – инсталляций не было, только продавали оборудование несколько раз.

Позже решил посерьёзнее познакомиться с тем, что же у ребят получилось. Первый критерий оценки очень простой – беспроблемная установка софта. Скачал дистрибутив, попробовал поставить – не вышло. Отложил до лучших времён.

Справедливости ради скажу, что та же история произошла и с CARDDEX – попробовал, словил кучу проблем, отложил. Логика такая – разобраться можно со всем, но зачем лишние проблемы на объекте, если есть гораздо более стабильные решения.

Ошибка при применении параметров безопасности

Первое знакомство

Недавно обратился клиент с просьбой установить ему СКУД со считывателями, работающими по технологии BLE и NFC. И сам же клиент нашёл такой считыватель R15-Multi у RusGuard, поскольку первоначально предложенный мной считыватель SIGUR MR1 BLE был заметно дороже. К тому же софт у SIGUR стоит денег, а у RusGuard предоставляется бесплатно.

Решено – RusGuard-у на объекте быть! Будет интересно поразбираться с новым оборудованием. Связался с поставщиком, обсудили возникшие вопросы об автономной и сетевой работе, сформировали комплект оборудования и сделали заказ.

Установка

Сроки поджимали, поэтому пощупать оборудование в офисе не удалось – сразу приступили к монтажу. Решил потренироваться в установке на своём ноутбуке. Недавно менял диск и ставил заново ОС, поэтому компьютер, практически, девственно чист. Не ожидая подвоха скачал дистрибутив (3,7 Гб вместе с SQL Server) и запустил установку.

При запуске было сказано, что .NET Framework 4.6 в системе присутствует, а IIS отсутствует, поэтому будет установлен автоматически. Далее выбрал вариант с установкой SQL ServerExpress 2014, задал имена и пароли, какие попросили, но чуда не случилось – установка завершилась с ошибкой. Попробовал ещё раз – то же самое.

Когда ничего не получается, самое время читать инструкцию или смотреть видеоролик, поэтому полез смотреть ролик про установку. Первое требование – компьютер должен быть “чистым”. Почти так и есть. Следующая возможная проблема – имя компьютера. Почему-то дефолтные виндовые имена – это не есть “хорошо”. Имя действительно было дефолтное – поменял, не помогло.

Включил вручную ISS, хотя об этом в ролике и не было, и повторил попытку – не помогло. Посмотрел ролик дальше и увидел там, что необходимо установить ещё и .NET Framework 3.5, а иначе SQL Server не установится. Установил фреймворк, запустил снова инсталлятор и SQL Server таки встал! Но рано радовался, т.к. установка опять завершилась с ошибкой – что-то там с правами.

Невозможно завершить операцию ошибка 0x000006ba?

Запустил инсталлятор снова и выбрал вариант с уже установленным SQL Server. На следующем шаге инсталлятор выдал ошибку авторизации и предложил ввести правильный пароль пользователя sa. Ввёл. Инсталлятор его принял и на следующем шаге попросил ввести пароль пользователя user для сервера отчётов.

Не понял, что за пользователь такой, но нашёл в документации, что на сервер отчётов вход производится под пользователем ОС и ввёл свои логин и пароль. Инсталлятор ещё пошуршал и, о чудо – установка завершилась успешно!

Что хочется сказать? Не надо так! Почему установка происходит с такими сложностями? Почему нельзя всё автоматизировать? Чем плохи дефолтные виндовые имена?

Почему наличие в системе .NET Framework 4.6 проверяется, а .NET Framework 3.5 нет, хотя он необходим?

Взять те же SIGUR или PERCo – в них установка происходит на порядок проще. Ну и фраза “ПО может не установиться”, часто звучащая в ролике, несколько настораживает. Сделайте так, чтобы устанавливалось! Хороший и правильный дистрибутив должен содержать в себе все необходимые компоненты, проверять соблюдение всех требований и не допускать возникновения ошибок в процессе установки.

На объекте пришлось устанавливать на Windows Server 2019. В принципе всё прошло гладко, кроме того, что сначала пытался запускать инсталлятор из папки с Рабочего стола, но из-за длинных путей SQL Server устанавливаться не хотел. Опять же, без объяснения причин. По совету тех.поддержки попробовал установить его отдельно и только тогда увидел причину ошибки установки.

Проблемы с NFC и BLE

Проблемы эти проявились в процессе настройки, но чтобы не отвлекаться от темы настройки в следующей части, расскажу про них сразу. Так вот, оказалось, что несмотря на информацию в описании считывателя R15-Multi, приложения под iOS нет в принципе. Оно, как-бы в разработке, но сроки выхода неизвестны.

Из этого следует то, что технология BLE для iPhone пока недоступна. Использовать можно только NFC, но, поскольку прямой доступ к чипу NFC в iOS закрыт, то приходится делать это через ApplePay, используя в качестве идентификатора ID какой-нибудь банковской карты. Это несколько смущает пользователей. т.к. при поднесении смартфона к считывателю они видят тот же интерфейс, что и при оплате через терминал на кассе. Многие опасаются, а не снимут ли у них со счёта деньги.

На смартфонах с Android тоже можно пользоваться Google Pay, но есть и приложение, называется RusGuard Key. В нём настраивается тип идентификатора (3 варианта) и каким образом должна происходить идентификация – через NFC или BLE или и так и так и если через BLE, то автоматически или вручную.

Автоматический режим работы BLE подразумевает разблокировку двери сразу, как только смартфон попадает в зону действия считывателя. И вот это второй EPIC FAIL – в отличие, например, от считывателя SIGUR MR1 BLE, дальность действия считывателя R15-Multi не настраивается! То есть дверь открывается с расстояния 5-6 метров.

А может и больше – это уже зависит от модуля Bluetooth смартфона. Ручной режим подразумевает отправку идентификатора не постоянно, а только после сработки акселерометра, то есть смартфон надо потрясти или покрутить. Это уже лучше, но всё равно не очень хорошо, потому что эти настройки делаются в приложении на смартфоне пользователя, а такие вещи лучше делать на стороне сервера.

Ну и финальный аккорд – не на всех Android-смартфонах приложение работает корректно. Это понятно – производителей таких смартфонов много, версий систем в них установленных, учитывая кастомные прошивки, ещё больше, ну и различные настройки безопасности и энергосбережения тоже вносят свой вклад. Винить разработчиков RusGuard тут не стоит – об этом честно упомянуто в описании продукта.

Настройка

Честно говоря, сначала софт не порадовал. Хотя и у аналогичных продуктов конкурентов интерфейс, прямо скажем, оригинальный. Так что придираться не буду. Хорошо то, что не глючит. Настроек много – чувствуется, что система масштабная и гибкая.

После нескольких часов работы и к интерфейсу привыкаешь.

Автопоиском нашёл контроллер, добавил в систему, выбрал нужный тип точки доступа – Две двери и поменял схему индикации. Что SIGUR, что RusGuard используют по умолчанию каки-то странные настройки, а нужно то самое простое – чтобы в закрытом состоянии на считывателе горел красный индикатор, а при отпирании замка – зелёный. В SIGUR-е с индикацией всё сложно. Здесь же – из выпадающего списка значений параметра Схема индикации выбираем пункт Дежурный красный и всё работает, как надо.

На вкладке Дверь 1 и Дверь 2 нужно поменять протокол считывателя на RBus, чтобы настраивать его параметры из ПО.

Нужно было настроить систему на работу с NFC и BLE и c брелками форматов Mifare и EM-Marine, благо считыватель R15-Multi всеформатный. Для настройки нужно зайти в раздел Конфигурация системы, найти в дереве пункт Настройки Mifare и добавить профили для идентификаторов Mifare, приложения RusGuard Key и Apple/Google Pay. Профили для приложения и платёжных систем не настраиваются, а профиль для идентификаторов нужно чуть подправить. Усиленная защита не требуется, к тому же настольного считывателя нет, поэтому эмиссию идентификаторов Mifare производить не нужно, да и не получится. В параметре Режим аутентификации нужно выбрать вариант Защищённые данные или UID.

Теперь нужно в настройках контроллера добавить эти профили в список, причём в правильной последовательности: идентификатор, приложение, платёжная система. В нашем случае: Key, App, Pay. Далее, на вкладке RBus нужно сменить режим аутентификации на вариант Настройки профиля и там же ниже выбрать Разрешённые типы карт.

СКУД RusGuard. Первый запуск.

  • СКУД RusGuard. Первый запуск.
  • СКУД RusGuard. Первый запуск.
  • СКУД RusGuard. Первый запуск.
  • Настройка RusGuard

    Следующий этап – импорт сотрудников из предоставленного XLS-файла. В основном ПО такой функции нет, но есть специальная утилита UniversalImport. Файл был специальным образом подготовлен – каждое поле в отдельном столбце и успешно импортирован в БД. После импорта сотрудников нужно было дать им право доступа. Это делается либо персонально, либо наследуется из настроек отдела.

    Хотел завести один родительский отдел и перенести все остальные в него, чтобы сделать назначение прав доступа парой кликов, но не вышло – в ПО нельзя редактировать структуру компании. Отделы можно только удалять и добавлять. Пришлось задавать права доступа для каждого отдела.

    Опытная эксплуатация

    Через пару дней после запуска в работу один из считывателей странным образом заглючил – перестал читать Mifare и NFC c BLE. С EM-Marine проблем не было. Нормальная работа восстановилась после перезапуска контроллера и считывателей путём сброса питания. Тех.поддержка посоветовала прошить считыватели свежей прошивкой и понаблюдать дальше, а если сбои повторятся, то отправлять к ним в ремонт или для замены. Продолжаем наблюдение.

    Источник: mixatronik.ru

    Ошибка при проверке безопасности сообщения

    Здравствуйте.
    У меня wcf сервис в виде службы.
    Конфигурация сервера:

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
    > > name=»dbAuthentication» providerName=»System.Data.SqlClient» connectionString=»Data Source = IVANOVAAIVANOV; User Password=mt043384; Initial Catalog = GTP» /> > > defaultProvider=»DefaultMembershipProvider» > > name=»DefaultMembershipProvider» type=»System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ connectionStringName=»dbAuthentication» enablePasswordRetrieval=»false» enablePasswordReset=»true» requiresQuestionAndAnswer=»false» requiresUniqueEmail=»false» maxInvalidPasswordAttempts=»5″ minRequiredPasswordLength=»6″ minRequiredNonalphanumericCharacters=»0″ passwordAttemptWindow=»10″ applicationName=»/» /> > > enabled=»true» defaultProvider=»DefaultRoleProvider»> > name=»DefaultRoleProvider» type=»System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ /> > > > > > > name=»»> httpGetEnabled=»true» httpsGetEnabled=»true» /> includeExceptionDetailInFaults=»true» /> > membershipProviderName=»DefaultMembershipProvider»/> > > > > name=»webHttpBehavior»> /> > > > > name=»AppServer.ServiceFacade»> address=»» binding=»customBinding» bindingConfiguration=»custBinding» contract=»AppServer.IServiceFacade»> > value=»localhost» /> > > address=»mex» binding=»mexHttpBinding» contract=»IMetadataExchange» /> address=»» binding=»webHttpBinding» behaviorConfiguration=»webHttpBehavior» contract=»AppServer.IClientAccessPolicy» /> > > baseAddress=»net.tcp://localhost:4504/ServiceFacade» /> baseAddress=»http://localhost:80″ /> > > > > > > name=»LongTimeout» closeTimeout=»01:00:00″ openTimeout=»01:00:00″ receiveTimeout=»01:00:00″ sendTimeout=»01:00:00″ /> name=»MyBasicHttpBinding» maxBufferPoolSize=»2147483647″ maxBufferSize=»2147483647″ maxReceivedMessageSize=»2147483647″> maxDepth=»2147483647″ maxStringContentLength=»2147483647″ maxArrayLength=»2147483647″ maxBytesPerRead=»2147483647″ maxNameTableCharCount=»2147483647″ /> > > > name=»tcpBinding» closeTimeout=»00:10:00″ openTimeout=»00:1:00″ receiveTimeout=»00:30:00″ sendTimeout=»00:30:00″ maxBufferPoolSize=»2147483647″ maxBufferSize=»2147483647″ maxReceivedMessageSize=»2147483647″> maxDepth=»100″ maxArrayLength=»10485760″ maxBytesPerRead=»2147483647″ maxStringContentLength=»2147483647″ /> /> > > > name=»custBinding» closeTimeout=»00:10:00″ openTimeout=»00:1:00″ receiveTimeout=»00:30:00″ sendTimeout=»00:30:00″> —> authenticationMode=»UserNameOverTransport» allowInsecureTransport=»true» includeTimestamp=»true»/> maxBufferPoolSize=»2147483647″ maxBufferSize=»2147483647″ maxReceivedMessageSize=»2147483647″/> > > > > >
    Конфигурация клиента:
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
    > > > > name=»NetTcpBinding_IServiceFacade» > /> maxReceivedMessageSize=»2147483647″ maxBufferSize=»2147483647″ /> > > > > address=»net.tcp://localhost:4504/ServiceFacade» binding=»customBinding» bindingConfiguration=»NetTcpBinding_IServiceFacade» contract=»ServiceReference.IServiceFacade» name=»NetTcpBinding_IServiceFacade» /> > > >

    На клиенте устанавливаю Username и Password. При вызове любого контракта из фасада сервера, на клиенте летит исключение «Ошибка при проверке безопасности сообщения». Подскажите в чем проблема. Спасибо.

    1 2 3 4 5 6 7 8 9 10 11 12 13 14
    private async void LoginWithUsernamePassword() { ClientProvider.CurrentClient.ClientCredentials.UserName.UserName = Username; ClientProvider.CurrentClient.ClientCredentials.UserName.Password = Password; //IsBusy = true; //BusyContent = «Производится вход в систему. «; //ClientWrapper.CurrentUser = await ClientWrapper.Instance.TaskAsyncLogin(Username, Password); //if (!ClientWrapper.CurrentUser.IsAuth) // AuthResult = $»Неверная пара логин или пароль:nUsername: []nPassword: []»; //else if (IsRemember) // CreateCookies(); //IsBusy = false; }

    Добавлено через 7 часов 44 минуты
    В общем, вроде понял почему — в binding, на клиенте, необходимо добавить

    authenticationMode=»UserNameOverTransport» allowInsecureTransport=»true» includeTimestamp=»true»/>

    На проблема в том, что в silverlight allowInsecureTransport=»true» не видит. А без данного атрибута летит исключение.
    Как настроить аутентификацию при помощи дефолтных провайдеров в связке wcf сервер и silverlight клиент остается открытым

    Источник: www.cyberforum.ru

    Произошла ошибка при проверке безопасности сообщения

    когда я пытаюсь вызвать службу WCF я получаю следующее сообщение «произошла ошибка при проверке безопасности сообщения.»

    когда я удаляю пользовательскую аутентификацию, служба работает без проблем. Я не могу понять, что я неправильно сконфигурировал в своей сети.конфиг. Любое понимание будет оценено.

      <system.serviceModel>
         <services>
            <service behaviorConfiguration="NAThriveExtensions.nableAPIBehavior"
              name="NAThriveExtensions.nableAPI">
               <endpoint 
                 address="" 
                 binding="basicHttpBinding" 
                 bindingConfiguration="basicHttpBinding_Secure"
                 contract="NAThriveExtensions.InableAPI">
               </endpoint>
               <endpoint 
                 address="mex" 
                 binding="mexHttpsBinding" 
                 contract="IMetadataExchange" />
            </service>
         </services>
         <behaviors>
            <serviceBehaviors>
              <behavior name="NAThriveExtensions.nableAPIBehavior">
                <serviceMetadata httpsGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="false" />
                <serviceCredentials>
                  <userNameAuthentication 
                    userNamePasswordValidationMode="Custom" 
                  customUserNamePasswordValidatorType= "NAThriveExtensions.Authentication, NAThriveExtensions" />
                </serviceCredentials>
              </behavior>
            </serviceBehaviors>
         </behaviors>
         <bindings>
           <basicHttpBinding>
             <binding name="basicHttpBinding_Secure">
               <security mode="TransportWithMessageCredential">
                 <message clientCredentialType="UserName"/>
               </security>
             </binding>
           </basicHttpBinding>
         </bindings>
      </system.serviceModel>
    

    7 ответов


    Я получал это же сообщение об ошибке, и оказалось, что это связано с разницей во времени между моей рабочей станцией и сервером, на котором размещена служба WCF. Сервер был около 10 минут позади моей машины, и WCF security, похоже, не очень нравится.

    чтобы найти корневую проблему, я включил serviceSecurityAuditing в конфигурационном файле сервера. Добавьте в конфигурацию/систему следующее.serviceModel / поведение / serviceBehaviors / раздел поведение для вашего обслуживания:

    <serviceSecurityAudit 
        auditLogLocation="Application" 
        serviceAuthorizationAuditLevel="Failure" 
        messageAuthenticationAuditLevel="Failure" 
        suppressAuditFailure="true"/>
    

    следующий сайт был полезен в выяснении этого:

    http://blogs.microsoft.co.il/blogs/urig/archive/2011/01/23/wcf-quot-an-error-occurred-when-verifying-security-for-the-message-quot-and-service-security-audit.aspx


    другая причина это сообщение, когда некоторые из ваших машин не синхронизированы во времени. WCF по умолчанию допускает пятиминутный разрыв; кроме того, он выдает ошибку, если что-то не синхронизировано.

    раствор для синхронизации всех ваших машин. time.windows.com славится тем, что не работает, поэтому я предлагаю использовать что-то другое. (Если вы находитесь в корпоративной среде, локальный контроллер домена может быть правильный выбор.)


    Это оказалось проблемой на стороне потребления, а не с самой службой. Webmethods 8 программного обеспечения AG потреблял этот сервер, но не было никакого обработчика безопасности, добавленного к службе, поэтому учетные данные не были добавлены в заголовок, что привело к вышеупомянутой ошибке.


    Я получаю ту же ошибку на моем сервере IIS 7.5. Я забыл добавить разрешение на чтение на закрытый ключ сертификата в виртуальный аккаунт пула приложений (например, IIS AppPoolASP.NET v4.0).

    для информации, тестируя различные комбинации учетных записей и разрешений, я заметил, что пул приложений необходимо переработать, чтобы потерять доступ к ключу, как только он был извлечен один раз.

    (0x80131501-произошла ошибка при проверке безопасности сообщение.)


    Я получал ту же ошибку, и ни одна из вышеперечисленных помощь для меня.

    Я, наконец, отследил его до connectionStrings в родительской сети.config (моя служба была развернута в дочернем приложении на сайте администратора).

    Да, звучит смешно, но как только я завернул строки подключения в родительской сети.config с элементом location все начали работать.

    для ясности, в родительской сети.config я изменил это

    <connectionStrings>
        <add name="..." />
    </connectionStrings>
    

    в это

    <location path="." inheritInChildApplications="false">
        <connectionStrings>
            <add name="..." />
        </connectionStrings>
    </location>
    

    обратите внимание, что эта ошибка также привела к этому очень бесполезному serviceSecurityAudit сообщение:

    ошибка проверки подлинности сообщения.
    Услуга. :..
    Действие:http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT
    ClientIdentity:
    Значение activityid:
    ArgumentNullException: значение не может быть null.
    Имя параметра: менеджер


    Я получал ту же ошибку. Я забыл добавить разрешение на чтение в базу данных членства aspnetdb в (IIS APPPOOLDefaultAppPool).

    ошибка проверки подлинности сообщения. Услуга.:…

    действие:http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT

    ClientIdentity:

    значение activityid:

    SqlException: не удается открыть базу данных «aspnetdb», запрошенную логином. Ошибка входа в систему.

    ошибка входа в систему для IIS пользователя
    Пула средством’.


    имя пользователя и пароль сервер подключения,а не ваши
    имя пользователя и пароль для входа в систему.


    Локализация ошибки. Компоненты

    АРМ (распределенный вариант установки) и сервер RusGuard. Все версии ПО.

    Описание причин и устранение ошибки

    Если время и дата настроены некорректно, возможно возникновение ошибки при запуске ПО (см. рис. 7). Для исправления ошибки необходимо привести локальные настройки времени и даты в соответствие с сервером. Допустимое расхождение: +/- 5 минут.

    Рисунок 7 - Ошибка при запуске ПО. Некорректно выставлено время и дата на локальном ПК

    Рисунок 7 — Ошибка при запуске ПО. Некорректно выставлено время и дата на локальном ПК

    Пример

    Корректная настройка

    В таблице ниже приведены примеры корректной настройки времени/даты (см. табл. 1).

    Таблица 1 — Пример правильной настройки времени/даты

    Сервер

    АРМ

    Время 16.50 (часовой пояс +4)

    Время 16.50 (часовой пояс +4)

    Время 16.50 (часовой пояс +4)

    Время 15.50 (часовой пояс +3)

    Время 16.50 (часовой пояс +4)

    Время 17.50 (часовой пояс +5)

    Некорректная настройка

    В таблице ниже (см. табл. 2) приведены примеры некорректной настройки времени/даты:

    одинаковое время при разных часовых поясах;

    разное время в одном часовом поясе.

    Таблица 2 — Пример неправильной настройки времени/даты

    Сервер

    АРМ

    Время 16.50 (часовой пояс +4)

    Время 16.40 (часовой пояс +4)

    Время 16.50 (часовой пояс +4)

    Время 16.50 (часовой пояс +3)

    Время 16.50 (часовой пояс +4)

    Время 16.50 (часовой пояс +5)

    Произошла ошибка при проверке безопасности сообщения

    когда я пытаюсь вызвать службу WCF я получаю следующее сообщение «произошла ошибка при проверке безопасности сообщения.»

    когда я удаляю пользовательскую аутентификацию, служба работает без проблем. Я не могу понять, что я неправильно сконфигурировал в своей сети.конфиг. Любое понимание будет оценено.

      <system.serviceModel>
         <services>
            <service behaviorConfiguration="NAThriveExtensions.nableAPIBehavior"
              name="NAThriveExtensions.nableAPI">
               <endpoint 
                 address="" 
                 binding="basicHttpBinding" 
                 bindingConfiguration="basicHttpBinding_Secure"
                 contract="NAThriveExtensions.InableAPI">
               </endpoint>
               <endpoint 
                 address="mex" 
                 binding="mexHttpsBinding" 
                 contract="IMetadataExchange" />
            </service>
         </services>
         <behaviors>
            <serviceBehaviors>
              <behavior name="NAThriveExtensions.nableAPIBehavior">
                <serviceMetadata httpsGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="false" />
                <serviceCredentials>
                  <userNameAuthentication 
                    userNamePasswordValidationMode="Custom" 
                  customUserNamePasswordValidatorType= "NAThriveExtensions.Authentication, NAThriveExtensions" />
                </serviceCredentials>
              </behavior>
            </serviceBehaviors>
         </behaviors>
         <bindings>
           <basicHttpBinding>
             <binding name="basicHttpBinding_Secure">
               <security mode="TransportWithMessageCredential">
                 <message clientCredentialType="UserName"/>
               </security>
             </binding>
           </basicHttpBinding>
         </bindings>
      </system.serviceModel>
    

    7 ответов


    Я получал это же сообщение об ошибке, и оказалось, что это связано с разницей во времени между моей рабочей станцией и сервером, на котором размещена служба WCF. Сервер был около 10 минут позади моей машины, и WCF security, похоже, не очень нравится.

    чтобы найти корневую проблему, я включил serviceSecurityAuditing в конфигурационном файле сервера. Добавьте в конфигурацию/систему следующее.serviceModel / поведение / serviceBehaviors / раздел поведение для вашего обслуживания:

    <serviceSecurityAudit 
        auditLogLocation="Application" 
        serviceAuthorizationAuditLevel="Failure" 
        messageAuthenticationAuditLevel="Failure" 
        suppressAuditFailure="true"/>
    

    следующий сайт был полезен в выяснении этого:

    http://blogs.microsoft.co.il/blogs/urig/archive/2011/01/23/wcf-quot-an-error-occurred-when-verifying-security-for-the-message-quot-and-service-security-audit.aspx


    другая причина это сообщение, когда некоторые из ваших машин не синхронизированы во времени. WCF по умолчанию допускает пятиминутный разрыв; кроме того, он выдает ошибку, если что-то не синхронизировано.

    раствор для синхронизации всех ваших машин. time.windows.com славится тем, что не работает, поэтому я предлагаю использовать что-то другое. (Если вы находитесь в корпоративной среде, локальный контроллер домена может быть правильный выбор.)


    Это оказалось проблемой на стороне потребления, а не с самой службой. Webmethods 8 программного обеспечения AG потреблял этот сервер, но не было никакого обработчика безопасности, добавленного к службе, поэтому учетные данные не были добавлены в заголовок, что привело к вышеупомянутой ошибке.


    Я получаю ту же ошибку на моем сервере IIS 7.5. Я забыл добавить разрешение на чтение на закрытый ключ сертификата в виртуальный аккаунт пула приложений (например, IIS AppPoolASP.NET v4.0).

    для информации, тестируя различные комбинации учетных записей и разрешений, я заметил, что пул приложений необходимо переработать, чтобы потерять доступ к ключу, как только он был извлечен один раз.

    (0x80131501-произошла ошибка при проверке безопасности сообщение.)


    Я получал ту же ошибку, и ни одна из вышеперечисленных помощь для меня.

    Я, наконец, отследил его до connectionStrings в родительской сети.config (моя служба была развернута в дочернем приложении на сайте администратора).

    Да, звучит смешно, но как только я завернул строки подключения в родительской сети.config с элементом location все начали работать.

    для ясности, в родительской сети.config я изменил это

    <connectionStrings>
        <add name="..." />
    </connectionStrings>
    

    в это

    <location path="." inheritInChildApplications="false">
        <connectionStrings>
            <add name="..." />
        </connectionStrings>
    </location>
    

    обратите внимание, что эта ошибка также привела к этому очень бесполезному serviceSecurityAudit сообщение:

    ошибка проверки подлинности сообщения.
    Услуга. :..
    Действие:http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT
    ClientIdentity:
    Значение activityid:
    ArgumentNullException: значение не может быть null.
    Имя параметра: менеджер


    Я получал ту же ошибку. Я забыл добавить разрешение на чтение в базу данных членства aspnetdb в (IIS APPPOOLDefaultAppPool).

    ошибка проверки подлинности сообщения. Услуга.:…

    действие:http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT

    ClientIdentity:

    значение activityid:

    SqlException: не удается открыть базу данных «aspnetdb», запрошенную логином. Ошибка входа в систему.

    ошибка входа в систему для IIS пользователя
    Пула средством’.


    имя пользователя и пароль сервер подключения,а не ваши
    имя пользователя и пароль для входа в систему.



    Offline

    pavel.kozak

     


    #1
    Оставлено
    :

    10 января 2020 г. 10:23:50(UTC)

    pavel.kozak

    Статус: Участник

    Группы: Участники

    Зарегистрирован: 13.12.2019(UTC)
    Сообщений: 15
    Российская Федерация

    Добрый день.

    Пока вопрос туманный, т.к. нет полного понимания происходящего.

    Есть устоявшийся проект с использованием КриптоПро 4.0 + КриптоПро .NET (6893 работает стабильно), используется для подключения к Web сервису по WCF (Гост 2012).

    Начали миграцию проекта на NET Core 3.x + .NET Framework 4.7.2, до этого была смесь Core 2.x + .NET Framework 4.6.1.

    Предположительно(т.к. ставим средствами VS 2019, что он там ещё тянет под сомнением) после установки на машину SDK Core 3.x + SDK .NET Framework 4.8 + соответственно сам коре и фреймфорк получаем проблемы с WCF в существующем проекте, т.е. изменений в сам проект ещё не внесли, только установили Core + FrameWork посвежее.

    При попытке подключения к сервису с авторизацией по ГОСТ ключу 2012, получаем ошибку:

    Коллекция шифрования маркера не поддерживает алгоритм «urn:ietf:params:xml:ns:cpxmlsec:algorithms:transport-gost2012-256».

    Т.е. поведение, как будто не установлен КриптоПро .NET. Переустанавливаем весь комплект КриптоПро + КриптоПро .NET. Результата нет.

    Проверено на двух машинах Windows 10 И Windows Server 2012 R2.
    Сответсвующие лицензии есть и на рабочие станции и на сервер.
    Для проверки пришлось VS 2019 на сервер поставить, т.к. думали причина в Windows 10.

    Интересный момент, попробовали поднять версию Крипто Про .NET (SDK Крипто Про .NET поднимали соответственно) до 7132

    Выше указанная ошибка на этапе подключения пропала, но при вызове получили другую ошибку:
    System.ServiceModel.FaultException: An error occurred when verifying security for the message.

    Попробую узнать какую версию SDK Крипто Про использует поставщик Web Сервиса.

    Отредактировано пользователем 10 января 2020 г. 10:25:30(UTC)
     | Причина: Не указана


    Вверх

    Offline

    Максим Коллегин

     


    #2
    Оставлено
    :

    10 января 2020 г. 10:54:47(UTC)

    Максим Коллегин

    Статус: Сотрудник

    Группы: Администраторы

    Зарегистрирован: 12.12.2007(UTC)
    Сообщений: 6,253
    Мужчина
    Откуда: КРИПТО-ПРО

    Сказал «Спасибо»: 21 раз
    Поблагодарили: 658 раз в 582 постах

    Обновлять КриптоПро .Net при обновлении .Net нужно с вероятностью 90%
    Для .Net Core мы делаем fork (обсуждается в соседней ветке), но до WCF там ещё далеко.

    Знания в базе знаний, поддержка в техподдержке


    Вверх

    WWW


    Offline

    pavel.kozak

     


    #3
    Оставлено
    :

    10 января 2020 г. 11:02:18(UTC)

    pavel.kozak

    Статус: Участник

    Группы: Участники

    Зарегистрирован: 13.12.2019(UTC)
    Сообщений: 15
    Российская Федерация

    Спасибо.

    Да, форк видели но не решились, поэтому и смесь Core 98% + Framework 2%.

    Сосредоточимся тогда на вопросе почему не работает с .NET КриптоПро 7132.

    Попробуем ещё раз пересобрать с новым SDK 7132, может что-то упустил.

    Насколько важно, что бы .NET КриптоПро был одинаковый на клиенте и на сервере?
    Мне кажется должно быть все равно. На сервер повлиять мы не сможем.


    Вверх

    Offline

    Максим Коллегин

     


    #4
    Оставлено
    :

    10 января 2020 г. 11:11:32(UTC)

    Максим Коллегин

    Статус: Сотрудник

    Группы: Администраторы

    Зарегистрирован: 12.12.2007(UTC)
    Сообщений: 6,253
    Мужчина
    Откуда: КРИПТО-ПРО

    Сказал «Спасибо»: 21 раз
    Поблагодарили: 658 раз в 582 постах

    Автор: pavel.kozak Перейти к цитате

    Насколько важно, что бы .NET КриптоПро был одинаковый на клиенте и на сервере?
    Мне кажется должно быть все равно. На сервер повлиять мы не сможем.

    Не должны быть одинаковыми.

    Постарайтесь собрать трассировку WCF — посмотрим.

    Знания в базе знаний, поддержка в техподдержке


    Вверх

    WWW


    Offline

    pavel.kozak

     


    #5
    Оставлено
    :

    10 января 2020 г. 13:10:45(UTC)

    pavel.kozak

    Статус: Участник

    Группы: Участники

    Зарегистрирован: 13.12.2019(UTC)
    Сообщений: 15
    Российская Федерация

    Пересобрал с последним SDK.

    Если по трейсу, то получается следующий порядок:

    Пытаемся вызвать удаленную функцию TestAuthentication

    Поставщик токена безопасности открыт.
    На клиенте запущен сеанс безопасности.
    Подлинность EndpointReference была определена.
    Успешно выполнена аутентификациа.
    Протокол безопасности обеспечил защиту исходящего сообщения.
    Через канал отправлено сообщение
    Через канал получено сообщение
    Через канал запроса получен ответ.

    Генерирование исключения
    «Процессору безопасности не удалось найти заголовок безопасности в сообщении. Это может быть вызвано тем, что сообщение не защищено или имеет место несоответствия привязки между взаимодействующими сторонами. Это может произойти, если служба настроена с режимом безопасности, а клиент не применяет режим безопасности.»

    Незащищенное или неправильно защищенное сообщение об ошибке было получено от другой стороны.

    Протоколу безопасности не может проверить входящее сообщение.

    Конец.

    Тот же код с предыдущей версией работает корректно. Пока не возможности проверить на чистой машине свежий SDK КриптоПро на старом фреймвекке.


    Вверх

    Offline

    pavel.kozak

     


    #6
    Оставлено
    :

    10 января 2020 г. 13:19:38(UTC)

    pavel.kozak

    Статус: Участник

    Группы: Участники

    Зарегистрирован: 13.12.2019(UTC)
    Сообщений: 15
    Российская Федерация

    Автор: Максим Коллегин Перейти к цитате

    Не должны быть одинаковыми.
    Постарайтесь собрать трассировку WCF — посмотрим.

    Оказывается, все таки есть зависимости.

    https://br.so-ups.ru/Pub…ws=%5Bobject%20Object%5D

    Как-то упустил эту новость.

    Теперь тупичок, придется ещё одну кашу делать и запускать прослойку на машине со старым фремвёрком и старым .NET КриптоПро :(.


    Вверх

    Offline

    Максим Коллегин

     


    #7
    Оставлено
    :

    10 января 2020 г. 20:27:26(UTC)

    Максим Коллегин

    Статус: Сотрудник

    Группы: Администраторы

    Зарегистрирован: 12.12.2007(UTC)
    Сообщений: 6,253
    Мужчина
    Откуда: КРИПТО-ПРО

    Сказал «Спасибо»: 21 раз
    Поблагодарили: 658 раз в 582 постах

    Странно, ничего не слышал про это. Изучим вопрос.

    Знания в базе знаний, поддержка в техподдержке


    Вверх

    WWW


    Offline

    Артём Макаров

     


    #8
    Оставлено
    :

    13 января 2020 г. 8:31:35(UTC)

    Артём Макаров

    Статус: Сотрудник

    Группы: Участники

    Зарегистрирован: 20.02.2017(UTC)
    Сообщений: 184

    Сказал(а) «Спасибо»: 4 раз
    Поблагодарили: 48 раз в 48 постах

    Добрый день.

    Подскажите, какой сейчас target framework задан в проекте?

    Какая привязка используется?

    Если возможно приложите файл конфигурации клиента (app.config).

    Можете приложить wcf trace и messssage log с ошибкой?

    Как собирать можно посмотреть тут — https://docs.microsoft.c…figuring-message-logging
    Пример —

    Код:

    <system.diagnostics>
    	<sources>
    	  <source name="System.ServiceModel.MessageLogging" switchValue="All">
    		<listeners>
    		  <add type="System.Diagnostics.DefaultTraceListener" name="Default">
    			<filter type="" />
    		  </add>
    		  <add name="ServiceModelMessageLoggingListener">
    			<filter type="" />
    		  </add>
    		</listeners>
    	  </source>
    	  <source name="System.ServiceModel" switchValue="All" propagateActivity="true">
    		<listeners>
    		  <add type="System.Diagnostics.DefaultTraceListener" name="Default">
    			<filter type="" />
    		  </add>
    		  <add name="ServiceModelTraceListener">
    			<filter type="" />
    		  </add>
    		</listeners>
    	  </source>
    	</sources>
    	<sharedListeners>
    	  <add initializeData="C:logsmy_service_web_messages.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelMessageLoggingListener" traceOutputOptions="Timestamp">
    		<filter type="" />
    	  </add>
    	  <add initializeData="C:logsmy_serice_web_tracelog.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelTraceListener" traceOutputOptions="Timestamp">
    		<filter type="" />
    	  </add>
    	</sharedListeners>
    	<trace autoflush="true" />
      </system.diagnostics>

    Техническую поддержку оказываем тут
    Наша база знаний


    Вверх

    Offline

    pavel.kozak

     


    #9
    Оставлено
    :

    13 января 2020 г. 10:01:40(UTC)

    pavel.kozak

    Статус: Участник

    Группы: Участники

    Зарегистрирован: 13.12.2019(UTC)
    Сообщений: 15
    Российская Федерация

    Автор: Максим Коллегин Перейти к цитате

    Странно, ничего не слышал про это. Изучим вопрос.

    Насколько успел узнать, тикет поставщиком сервиса создавался, примерно в то время когда они писали эту новость.


    Вверх

    Offline

    pavel.kozak

     


    #10
    Оставлено
    :

    13 января 2020 г. 10:11:57(UTC)

    pavel.kozak

    Статус: Участник

    Группы: Участники

    Зарегистрирован: 13.12.2019(UTC)
    Сообщений: 15
    Российская Федерация

    Автор: Артём Макаров Перейти к цитате

    Подскажите, какой сейчас target framework задан в проекте?

    Проверяли несколько, поведение и ошибка одинаковые и на 4.6.2, 4.7.1, 4.8.
    Версия .NET Крипто про — 7132. Основной Крипто Про ставился последний 4.0, 9963.

    Автор: Артём Макаров Перейти к цитате

    Какая привязка используется?

    WSHttpBinding

    Это пример со стенда, в основном проекте вместо конфига настройка из кода идет. Но значения те же.

    <wsHttpBinding>
    <binding name=»wsHttpCertificateBinding» closeTimeout=»01:00:00″ openTimeout=»01:00:00″ receiveTimeout=»01:00:00″ sendTimeout=»01:00:00″
    maxBufferPoolSize=»52428800″ maxReceivedMessageSize=»52428800″>
    <readerQuotas maxStringContentLength=»2147483647″/>
    <security>
    <message clientCredentialType=»Certificate» negotiateServiceCredential=»false»/>
    </security>
    </binding>
    </wsHttpBinding>

    <endpoint address=»http://br.so-ups.ru:8091/PersonalApi/PersonalApiService.svc/ByCertificate»
    binding=»wsHttpBinding» bindingConfiguration=»wsHttpCertificateBinding»
    contract=»PersonalApiService.IPersonalApiService» name=»wsHttpCertificateEndpoint»>
    <identity>
    <certificateReference findValue=»5cee4b2593de373e184377a718bb5af83dea466b» x509FindType=»FindByThumbprint»
    storeLocation=»LocalMachine» storeName=»My» />
    </identity>
    </endpoint>

    Автор: Артём Макаров Перейти к цитате

    Можете приложить wcf trace и messssage log с ошибкой?

    Я отправлю в личку, то что собрали в пятницу с нашими настройками, если не подойдет, то позже сниму с вашими рекомендациями.


    Вверх
    Пользователи, просматривающие эту тему

    Guest

    Быстрый переход
     

    Вы не можете создавать новые темы в этом форуме.

    Вы не можете отвечать в этом форуме.

    Вы не можете удалять Ваши сообщения в этом форуме.

    Вы не можете редактировать Ваши сообщения в этом форуме.

    Вы не можете создавать опросы в этом форуме.

    Вы не можете голосовать в этом форуме.

    When I try to call a WCF service I am getting the following message «An error occurred when verifying security for the message.»

    When I remove the custom authenication the service works no problem. I can’t figure out though what I have misconfigured in my web.config. Any insight would be appreciated.

      <system.serviceModel>
         <services>
            <service behaviorConfiguration="NAThriveExtensions.nableAPIBehavior"
              name="NAThriveExtensions.nableAPI">
               <endpoint 
                 address="" 
                 binding="basicHttpBinding" 
                 bindingConfiguration="basicHttpBinding_Secure"
                 contract="NAThriveExtensions.InableAPI">
               </endpoint>
               <endpoint 
                 address="mex" 
                 binding="mexHttpsBinding" 
                 contract="IMetadataExchange" />
            </service>
         </services>
         <behaviors>
            <serviceBehaviors>
              <behavior name="NAThriveExtensions.nableAPIBehavior">
                <serviceMetadata httpsGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="false" />
                <serviceCredentials>
                  <userNameAuthentication 
                    userNamePasswordValidationMode="Custom" 
                  customUserNamePasswordValidatorType= "NAThriveExtensions.Authentication, NAThriveExtensions" />
                </serviceCredentials>
              </behavior>
            </serviceBehaviors>
         </behaviors>
         <bindings>
           <basicHttpBinding>
             <binding name="basicHttpBinding_Secure">
               <security mode="TransportWithMessageCredential">
                 <message clientCredentialType="UserName"/>
               </security>
             </binding>
           </basicHttpBinding>
         </bindings>
      </system.serviceModel>
    

    asked Sep 21, 2010 at 23:26

    Matt Klepeis's user avatar

    Matt KlepeisMatt Klepeis

    1,7241 gold badge14 silver badges25 bronze badges

    I was getting this same error message and it turned out to be due to a time difference between my workstation machine and the server hosting the WCF service. The server was about 10 minutes behind my machine and WCF security doesn’t seem to like that very much.

    To find the root problem I turned on serviceSecurityAuditing in the server’s config file. Add the following to the configuration/system.serviceModel/behaviors/serviceBehaviors/behavior section for your service:

    <serviceSecurityAudit 
        auditLogLocation="Application" 
        serviceAuthorizationAuditLevel="Failure" 
        messageAuthenticationAuditLevel="Failure" 
        suppressAuditFailure="true"/>
    

    The following site was helpful in figuring this out:

    http://blogs.microsoft.co.il/blogs/urig/archive/2011/01/23/wcf-quot-an-error-occurred-when-verifying-security-for-the-message-quot-and-service-security-audit.aspx

    answered Mar 7, 2013 at 23:10

    Sam's user avatar

    3

    Another cause of this message is when some of your machines are not synchronized in time. WCF, by default, allows a five-minute gap; beyond this, it throws an error if things are out of synch.

    The solution is to synch all your machines. time.windows.com is notorious for not working, so I suggest using something else. (If you’re in a corporate environment, a local domain controller may be the correct choice here.)

    answered Jan 31, 2014 at 16:30

    ashes999's user avatar

    ashes999ashes999

    9,84715 gold badges72 silver badges120 bronze badges

    3

    This ended up being an problem on the consuming side, not with the service itself. Software AG’s webMethods 8 was consuming this server but there was no Security Handler added to the service so the credentials were not being added to the header thus resulting the in the aforementioned error.

    answered Oct 8, 2010 at 16:24

    Matt Klepeis's user avatar

    Matt KlepeisMatt Klepeis

    1,7241 gold badge14 silver badges25 bronze badges

    2

    I had a similar issue.
    I was building my datetime formatted strings using my local time, but my service/server was expecting GMT.

    I needed to get the GMT time (JAVA):

    final Date currentTime = new Date();    
    final SimpleDateFormat sdf = 
    new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'.000Z'");
    sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
    System.out.println(sdf.format(currentTime));
    

    answered Mar 17, 2019 at 20:42

    Pablo Chvx's user avatar

    Pablo ChvxPablo Chvx

    1,74917 silver badges31 bronze badges

    I was getting the same error on my IIS 7.5 server. I forgot to add Read permission on the certificate’s private key to the app pool virtual account (e.g. IIS AppPoolASP.NET v4.0).

    For info, whilst testing various combinations of accounts and permissions, I noticed that the app pool needed to be recycled to lose access to the key, once it had been retrieved once.

    (0x80131501 — An error occurred when verifying security for the message.)

    answered Apr 8, 2013 at 5:57

    ssg31415926's user avatar

    ssg31415926ssg31415926

    1,0172 gold badges13 silver badges21 bronze badges

    I was getting the same error and none of the above help for me.

    I finally tracked it down to connectionStrings in a parent web.config (my service was deployed to a child application to an admin site).

    Yes sounds ridiculous, but as soon as I wrapped the connection strings in the parent web.config with a location element all started working.

    For clarity, in parent web.config, I changed this

    <connectionStrings>
        <add name="..." />
    </connectionStrings>
    

    to this

    <location path="." inheritInChildApplications="false">
        <connectionStrings>
            <add name="..." />
        </connectionStrings>
    </location>
    

    Note this error also resulted in this very unhelpful serviceSecurityAudit log message:

    Message authentication failed.
    Service: …
    Action: http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT
    ClientIdentity:
    ActivityId:
    ArgumentNullException: Value cannot be null.
    Parameter name: manager

    answered Sep 6, 2016 at 12:30

    Dan's user avatar

    I was getting the same error. I forgot to add Read permission on the membership database aspnetdb to the (IIS APPPOOLDefaultAppPool).

    Message authentication failed. Service:….

    Action: http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT

    ClientIdentity:

    ActivityId:

    SqlException: Cannot open database «aspnetdb» requested by the login. The login failed.

    Login failed for user ‘IIS
    APPPOOLDefaultAppPool’.

    Community's user avatar

    answered Dec 19, 2016 at 7:24

    Yasser Mohammed's user avatar

    The username and password is the server you connection,not your
    system login username and password.

    answered Dec 23, 2015 at 9:05

    MapleStory's user avatar

    MapleStoryMapleStory

    6183 gold badges11 silver badges21 bronze badges

    У меня проблема с подключением к моей службе WCF с помощью clientCredentialType="UserName".

    Когда я запускаю код ниже, я получаю сообщение об ошибке

    FaultException: при проверке безопасности для сообщения произошла ошибка.

    При игре с некоторыми значениями привязки я также получаю Access is denied..

    Fiddler говорит, что нет заголовка авторизации, и я не могу найти имя пользователя или пароль в запросе.

    Вот выдержки из моего конфига:

      <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>
      </system.webServer>
        <services>
          <service name="InventoryServices.MobileAPI"  behaviorConfiguration="customBehaviour">
            <endpoint address=""
                      binding="basicHttpBinding"
                      bindingConfiguration="secureHttpBinding"
                      contract="InventoryServices.IMobileAPI"/>
    
            <endpoint address="mex"
                      binding="mexHttpsBinding"
                      contract="IMetadataExchange" />
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="customBehaviour">
              <serviceSecurityAudit auditLogLocation="Application" serviceAuthorizationAuditLevel="Failure" messageAuthenticationAuditLevel="Failure" suppressAuditFailure="true" />
              <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
              <serviceMetadata httpsGetEnabled="true"/>
              <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
              <serviceDebug includeExceptionDetailInFaults="true"/>
              <serviceCredentials>
                <userNameAuthentication userNamePasswordValidationMode="Custom"
                   customUserNamePasswordValidatorType="InventoryLibrary.Helpers.UserAuthentication,InventoryLibrary"/>
              </serviceCredentials>
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
        <bindings>
          <basicHttpBinding>
            <binding name="secureHttpBinding">
              <security mode="TransportWithMessageCredential">
                <transport clientCredentialType="Basic" proxyCredentialType="Basic" realm="MyRealm"/>
                <message clientCredentialType="UserName" algorithmSuite="Default"  />
              </security>
            </binding>
          </basicHttpBinding>
        </bindings>
    

    Мой валидатор имени пользователя/пароля выглядит так:

      public class UserAuthentication : UserNamePasswordValidator {
            public override void Validate(string userName, string password) {
    
                EntitiesContext db = new EntitiesContext();
                db.Logs.Add(new DomainModels.Log() {
                    DateLogged = DateTime.Now,
                    Message = "hit auth",
                    Type = DomainModels.LogType.Info
                });
                db.SaveChanges();
    
                try {
    
                    if (userName == "test" && password == "test123") {
                        Console.WriteLine("Authentic User");
                    }
                }
                catch (Exception ex) {
                    throw new FaultException("Unknown Username or Incorrect Password");
                }
            }
        }
    

    У меня это как простой тест на моем сервисе:

    [OperationContract]
    [XmlSerializerFormat]
    void Test();
    
    [PrincipalPermission(SecurityAction.Demand, Name = "test")]
    public void Test() {
    
    }
    

    У меня есть собственный сертификат SSL на моем сервере, и я могу получить доступ к своим сервисам/метаданным.

    Затем я добавил ссылку на службу в консольном приложении и попытаюсь подключиться к службе с помощью этого кода ниже:

    class Program {
        static void Main(string[] args) {
    
            Stuff.InitiateSSLTrust();
    
            BasicHttpBinding binding = new BasicHttpBinding();
            binding.Security.Mode = BasicHttpSecurityMode.Transport;
            binding.Security.Transport.Realm = "MyRealm";
    
            ServiceReference1.MobileAPIClient serviceProxy = new ServiceReference1.MobileAPIClient(binding, new EndpointAddress("https://xx.xx.xx.xx/InventoryServices.MobileApi.svc"));
    
            serviceProxy.ClientCredentials.UserName.UserName = "test";
            serviceProxy.ClientCredentials.UserName.Password = "test123";
    
            try {
    
                var a = serviceProxy.Login("a", "b");
            }
            catch (Exception ex) {
                var ex2 = ex;
            }
        }
    }
    
    public class Stuff {
        public static void InitiateSSLTrust() {
            try {
                //Change SSL checks so that all checks pass
                ServicePointManager.ServerCertificateValidationCallback =
                    new RemoteCertificateValidationCallback(
                        delegate { return true; }
                    );
            }
            catch (Exception ex) {
            }
        }
    }
    

    Я проверил средство просмотра событий на сервере, и эта ошибка появляется с каждым запросом:

    MessageSecurityException: процессору безопасности не удалось найти заголовок безопасности в сообщении. Это может быть связано с тем, что сообщение является необеспеченной ошибкой или потому, что существует связующее несоответствие между общающимися сторонами. Это может произойти, если служба настроена для обеспечения безопасности, а клиент не использует безопасность.

    Ответ 1

    Вы указываете стороне клиента использовать BasicHttpSecurityMode.Transport, тогда как служба ожидает BasicHttpSecurityMode.TransportWithMessageCredential. Это проблема, потому что служба ищет учетные данные клиента в заголовке сообщения SOAP, и клиент не отправит их с привязкой, сконфигурированной таким образом.

    Следовательно, поэтому пара имени пользователя/пароля отсутствует в заголовке сообщения, когда вы являетесь свидетелем. Таким образом, зритель событий был прав, что между связующими сторонами имело место несовпадение.

    Также установите ClientCredentialType на клиенте BasicHttpMessageCredentialType.UserName для Message уровня безопасности. По умолчанию BasicHttpBinding использует None, которые являются анонимными клиентами.

    Здесь фрагмент кода, описывающий вышеизложенные изменения:

    var basicHttpBinding = new BasicHttpBinding(
                                  BasicHttpSecurityMode.TransportWithMessageCredential);
    basicHttpBinding.Security.Message.ClientCredentialType = 
                                         BasicHttpMessageCredentialType.UserName;
    

    Ответ 2

    Это также может быть вызвано отсутствием синхронизации между клиентом и сервером. Если сертификат или подписанный токен являются недействительными по времени, то может быть возвращено то же сообщение An error occurred when verifying security for the message..

    • Remove From My Forums
    • Вопрос

    • Добрый день, господа. Подскажите, куда копать.

      Windows Server 2008 R2 32 bit.

      В IIS развернут узел,  — сайт web-forms,с аутентификацией по сертификату. 

      Есть ссылка на wcf, от которой получает данные. 

       При запускe на iisexpress через VS2013 в режиме отладки — все хорошо. После публикации и размещения на вышеуказанном сервере — вот такая ошибка:

      Ошибка сервера в приложении ‘/’.


      Описание: Необработанное исключение при выполнении текущего веб-запроса. Изучите трассировку стека для получения дополнительных сведений о данной ошибке и о вызвавшем ее фрагменте кода.

      Сведения об исключении: System.ServiceModel.FaultException: An error occurred when verifying security for the message.

      Ошибка источника:

      Необработанное исключение при выполнении текущего веб-запроса. Информацию о происхождении и месте возникновения исключения можно получить, используя следующую трассировку стека исключений.

      Трассировка стека:

      [FaultException: An error occurred when verifying security for the message.]
      
      [MessageSecurityException: Незащищенное или неправильно защищенное сообщение об ошибке было получено от другой стороны. Код ошибки и описание см. внутреннее исключение.]
         System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) +10818447
         System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) +336
         Service_portal.ServiceReference.IHotLine.GetData(String ProcName, CustomParams[] _params, String DBname) +0
         Service_portal.ContactClass.AddParams(String name, String value, String proc, String dbnum) +276
         Service_portal.ControlDistionary.Page_Load(Object sender, EventArgs e) +59
         System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +51
         System.Web.UI.Control.OnLoad(EventArgs e) +92
         System.Web.UI.Control.LoadRecursive() +54
         System.Web.UI.Control.LoadRecursive() +145
         System.Web.UI.Control.LoadRecursive() +145
         System.Web.UI.Control.LoadRecursive() +145
         System.Web.UI.Control.LoadRecursive() +145
         System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +772
      

      • Перемещено

        26 марта 2015 г. 11:36

    Ответы

    • Здравствуйте,

      Похоже на ошибку с WCF, как одна из возможных причин, если время клиента и сервера отличается более чем на 10 минут, то не удастся пройти
      проверку безопасности .


      Best Regards, Andrei …
      Microsoft Certified Professional

      • Предложено в качестве ответа
        Tomas Lilov
        26 марта 2015 г. 12:30
      • Помечено в качестве ответа
        Иван ПродановMicrosoft contingent staff, Moderator
        31 марта 2015 г. 7:50
    • Remove From My Forums
    • Question

    • Hello,

      We have a wcf service hosted in IIS. We used basicHttpBinding and implemented a UserNamePasswordValidator for the custom authentication.

      However, we have issues when the WCF is consumed with a asmx client.

      An error occurred when verifying security for the message.

      (because asmx client can only work basicHttpBinding with transport security. basic authentication is disabled.)

      Here is my security config

                          <security mode="TransportWithMessageCredential">
                              <transport clientCredentialType="None" proxyCredentialType="None"
                                  realm="" />
                              <message clientCredentialType="UserName" algorithmSuite="Default" />
                          </security>

      what are the solutions? We thought of using a simple Message Header for the authentication, however we don’t want to pass the credentials in the parameters of the method call

      var s = new service.TaskService();
      s.GetSomething(credential, TaskNumber); //not nice...
      • Edited by

        Tuesday, June 4, 2013 7:58 AM

    Answers

    • Maybe the following links can help you to sort out what the problem is: http://stackoverflow.com/questions/3765212/an-error-occurred-when-verifying-security-for-the-message

      http://blogs.microsoft.co.il/blogs/urig/archive/2011/01/23/wcf-quot-an-error-occurred-when-verifying-security-for-the-message-quot-and-service-security-audit.aspx

      Like I wrote before, you should be able to use a UserNamePasswordValidator with basicHttpBinding by using the Message security mode with a certificate or the TransportWithMessageCredential security mode with SSL.

      • Edited by
        Magnus (MM8)MVP
        Tuesday, June 4, 2013 2:22 PM
      • Marked as answer by
        Haixia_Xie
        Tuesday, June 11, 2013 7:43 AM
      • Marked as answer by
        Haixia_Xie
        Tuesday, June 11, 2013 7:43 AM
    • Remove From My Forums
    • Question

    • Hello,

      We have a wcf service hosted in IIS. We used basicHttpBinding and implemented a UserNamePasswordValidator for the custom authentication.

      However, we have issues when the WCF is consumed with a asmx client.

      An error occurred when verifying security for the message.

      (because asmx client can only work basicHttpBinding with transport security. basic authentication is disabled.)

      Here is my security config

                          <security mode="TransportWithMessageCredential">
                              <transport clientCredentialType="None" proxyCredentialType="None"
                                  realm="" />
                              <message clientCredentialType="UserName" algorithmSuite="Default" />
                          </security>

      what are the solutions? We thought of using a simple Message Header for the authentication, however we don’t want to pass the credentials in the parameters of the method call

      var s = new service.TaskService();
      s.GetSomething(credential, TaskNumber); //not nice...
      • Edited by

        Tuesday, June 4, 2013 7:58 AM

    Answers

    • Maybe the following links can help you to sort out what the problem is: http://stackoverflow.com/questions/3765212/an-error-occurred-when-verifying-security-for-the-message

      http://blogs.microsoft.co.il/blogs/urig/archive/2011/01/23/wcf-quot-an-error-occurred-when-verifying-security-for-the-message-quot-and-service-security-audit.aspx

      Like I wrote before, you should be able to use a UserNamePasswordValidator with basicHttpBinding by using the Message security mode with a certificate or the TransportWithMessageCredential security mode with SSL.

      • Edited by
        Magnus (MM8)MVP
        Tuesday, June 4, 2013 2:22 PM
      • Marked as answer by
        Haixia_Xie
        Tuesday, June 11, 2013 7:43 AM
      • Marked as answer by
        Haixia_Xie
        Tuesday, June 11, 2013 7:43 AM

    Произошла ошибка при проверке безопасности сообщения

    когда я пытаюсь вызвать службу WCF я получаю следующее сообщение «произошла ошибка при проверке безопасности сообщения.»

    когда я удаляю пользовательскую аутентификацию, служба работает без проблем. Я не могу понять, что я неправильно сконфигурировал в своей сети.конфиг. Любое понимание будет оценено.

      <system.serviceModel>
         <services>
            <service behaviorConfiguration="NAThriveExtensions.nableAPIBehavior"
              name="NAThriveExtensions.nableAPI">
               <endpoint 
                 address="" 
                 binding="basicHttpBinding" 
                 bindingConfiguration="basicHttpBinding_Secure"
                 contract="NAThriveExtensions.InableAPI">
               </endpoint>
               <endpoint 
                 address="mex" 
                 binding="mexHttpsBinding" 
                 contract="IMetadataExchange" />
            </service>
         </services>
         <behaviors>
            <serviceBehaviors>
              <behavior name="NAThriveExtensions.nableAPIBehavior">
                <serviceMetadata httpsGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="false" />
                <serviceCredentials>
                  <userNameAuthentication 
                    userNamePasswordValidationMode="Custom" 
                  customUserNamePasswordValidatorType= "NAThriveExtensions.Authentication, NAThriveExtensions" />
                </serviceCredentials>
              </behavior>
            </serviceBehaviors>
         </behaviors>
         <bindings>
           <basicHttpBinding>
             <binding name="basicHttpBinding_Secure">
               <security mode="TransportWithMessageCredential">
                 <message clientCredentialType="UserName"/>
               </security>
             </binding>
           </basicHttpBinding>
         </bindings>
      </system.serviceModel>
    

    7 ответов


    Я получал это же сообщение об ошибке, и оказалось, что это связано с разницей во времени между моей рабочей станцией и сервером, на котором размещена служба WCF. Сервер был около 10 минут позади моей машины, и WCF security, похоже, не очень нравится.

    чтобы найти корневую проблему, я включил serviceSecurityAuditing в конфигурационном файле сервера. Добавьте в конфигурацию/систему следующее.serviceModel / поведение / serviceBehaviors / раздел поведение для вашего обслуживания:

    <serviceSecurityAudit 
        auditLogLocation="Application" 
        serviceAuthorizationAuditLevel="Failure" 
        messageAuthenticationAuditLevel="Failure" 
        suppressAuditFailure="true"/>
    

    следующий сайт был полезен в выяснении этого:

    http://blogs.microsoft.co.il/blogs/urig/archive/2011/01/23/wcf-quot-an-error-occurred-when-verifying-security-for-the-message-quot-and-service-security-audit.aspx


    другая причина это сообщение, когда некоторые из ваших машин не синхронизированы во времени. WCF по умолчанию допускает пятиминутный разрыв; кроме того, он выдает ошибку, если что-то не синхронизировано.

    раствор для синхронизации всех ваших машин. time.windows.com славится тем, что не работает, поэтому я предлагаю использовать что-то другое. (Если вы находитесь в корпоративной среде, локальный контроллер домена может быть правильный выбор.)


    Это оказалось проблемой на стороне потребления, а не с самой службой. Webmethods 8 программного обеспечения AG потреблял этот сервер, но не было никакого обработчика безопасности, добавленного к службе, поэтому учетные данные не были добавлены в заголовок, что привело к вышеупомянутой ошибке.


    Я получаю ту же ошибку на моем сервере IIS 7.5. Я забыл добавить разрешение на чтение на закрытый ключ сертификата в виртуальный аккаунт пула приложений (например, IIS AppPoolASP.NET v4.0).

    для информации, тестируя различные комбинации учетных записей и разрешений, я заметил, что пул приложений необходимо переработать, чтобы потерять доступ к ключу, как только он был извлечен один раз.

    (0x80131501-произошла ошибка при проверке безопасности сообщение.)


    Я получал ту же ошибку, и ни одна из вышеперечисленных помощь для меня.

    Я, наконец, отследил его до connectionStrings в родительской сети.config (моя служба была развернута в дочернем приложении на сайте администратора).

    Да, звучит смешно, но как только я завернул строки подключения в родительской сети.config с элементом location все начали работать.

    для ясности, в родительской сети.config я изменил это

    <connectionStrings>
        <add name="..." />
    </connectionStrings>
    

    в это

    <location path="." inheritInChildApplications="false">
        <connectionStrings>
            <add name="..." />
        </connectionStrings>
    </location>
    

    обратите внимание, что эта ошибка также привела к этому очень бесполезному serviceSecurityAudit сообщение:

    ошибка проверки подлинности сообщения.
    Услуга. :..
    Действие:http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT
    ClientIdentity:
    Значение activityid:
    ArgumentNullException: значение не может быть null.
    Имя параметра: менеджер


    Я получал ту же ошибку. Я забыл добавить разрешение на чтение в базу данных членства aspnetdb в (IIS APPPOOLDefaultAppPool).

    ошибка проверки подлинности сообщения. Услуга.:…

    действие:http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT

    ClientIdentity:

    значение activityid:

    SqlException: не удается открыть базу данных «aspnetdb», запрошенную логином. Ошибка входа в систему.

    ошибка входа в систему для IIS пользователя
    Пула средством’.


    имя пользователя и пароль сервер подключения,а не ваши
    имя пользователя и пароль для входа в систему.


    Когда я пытаюсь вызвать службу WCF, я получаю следующее сообщение: «Произошла ошибка при проверке безопасности сообщения».

    Когда я удаляю пользовательскую аутентификацию, служба работает без проблем. Я не могу понять, что я неправильно сконфигурировал в своем web.config. Любое понимание будет оценено.

      <system.serviceModel>
         <services>
            <service behaviorConfiguration="NAThriveExtensions.nableAPIBehavior"
              name="NAThriveExtensions.nableAPI">
               <endpoint 
                 address="" 
                 binding="basicHttpBinding" 
                 bindingConfiguration="basicHttpBinding_Secure"
                 contract="NAThriveExtensions.InableAPI">
               </endpoint>
               <endpoint 
                 address="mex" 
                 binding="mexHttpsBinding" 
                 contract="IMetadataExchange" />
            </service>
         </services>
         <behaviors>
            <serviceBehaviors>
              <behavior name="NAThriveExtensions.nableAPIBehavior">
                <serviceMetadata httpsGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="false" />
                <serviceCredentials>
                  <userNameAuthentication 
                    userNamePasswordValidationMode="Custom" 
                  customUserNamePasswordValidatorType= "NAThriveExtensions.Authentication, NAThriveExtensions" />
                </serviceCredentials>
              </behavior>
            </serviceBehaviors>
         </behaviors>
         <bindings>
           <basicHttpBinding>
             <binding name="basicHttpBinding_Secure">
               <security mode="TransportWithMessageCredential">
                 <message clientCredentialType="UserName"/>
               </security>
             </binding>
           </basicHttpBinding>
         </bindings>
      </system.serviceModel>
    

    8 ответов

    Лучший ответ

    В конечном итоге это стало проблемой для потребителя, а не для самой службы. WebMethods 8 компании Software AG использовала этот сервер, но к службе не был добавлен обработчик безопасности, поэтому учетные данные не добавлялись в заголовок, что приводило к вышеупомянутой ошибке.


    7

    Matt Klepeis
    8 Окт 2010 в 20:24

    Я получал такое же сообщение об ошибке, и это оказалось из-за разницы во времени между моей рабочей станцией и сервером, на котором размещена служба WCF. Сервер отставал от моей машины примерно на 10 минут, и безопасности WCF это, похоже, не очень нравится.

    Чтобы найти основную проблему, я включил serviceSecurityAuditing в файле конфигурации сервера. Добавьте следующее в раздел конфигурации / system.serviceModel / behavior / serviceBehaviors / behavior для своей службы:

    <serviceSecurityAudit 
        auditLogLocation="Application" 
        serviceAuthorizationAuditLevel="Failure" 
        messageAuthenticationAuditLevel="Failure" 
        suppressAuditFailure="true"/>
    

    Следующий сайт помог разобраться в этом:

    http://blogs.microsoft.co.il/blogs/urig/archive/2011/01/23/wcf-quot-an-error-occurred-when-verifying-security-for-the-message-quot-and- сервис-безопасность-audit.aspx


    40

    Sam
    8 Мар 2013 в 03:10

    Другая причина этого сообщения — когда некоторые из ваших компьютеров не синхронизированы во времени. WCF по умолчанию допускает пятиминутный перерыв; помимо этого, он выдает ошибку, если что-то не синхронизируется.

    Решение состоит в том, чтобы синхронизировать все ваши машины. time.windows.com печально известен тем, что не работает, поэтому я предлагаю использовать что-нибудь другое. (Если вы работаете в корпоративной среде, здесь может быть правильным выбором локальный контроллер домена.)


    19

    ashes999
    31 Янв 2014 в 20:30

    У меня была аналогичная проблема. Я создавал строки в формате datetime, используя мое местное время , но моя служба / сервер ожидала GMT .

    Мне нужно было получить время по Гринвичу (JAVA):

    final Date currentTime = new Date();    
    final SimpleDateFormat sdf = 
    new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'.000Z'");
    sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
    System.out.println(sdf.format(currentTime));
    


    1

    Pablo Chvx
    17 Мар 2019 в 23:42

    Я получал ту же ошибку на своем сервере IIS 7.5. Я забыл добавить разрешение на чтение закрытого ключа сертификата в пул приложений виртуальная учетная запись (например, IIS AppPool ASP.NET v4.0).

    Для информации, при тестировании различных комбинаций учетных записей и разрешений я заметил, что пул приложений необходимо переработать, чтобы потерять доступ к ключу после того, как он был получен один раз.

    (0x80131501 — Произошла ошибка при проверке безопасности сообщения.)


    0

    ssg31415926
    8 Апр 2013 в 09:57

    Я получал ту же ошибку, и ничего из вышеперечисленного мне не помогло.

    Я наконец отследил это до connectionStrings в родительском файле web.config (моя служба была развернута в дочернем приложении на сайте администратора).

    Да, звучит смешно, но как только я обернул строки подключения в родительский файл web.config элементом местоположения, все заработало.

    Для ясности в родительском файле web.config я изменил это

    <connectionStrings>
        <add name="..." />
    </connectionStrings>
    

    К этому

    <location path="." inheritInChildApplications="false">
        <connectionStrings>
            <add name="..." />
        </connectionStrings>
    </location>
    

    Обратите внимание, что эта ошибка также привела к очень бесполезному serviceSecurityAudit сообщение журнала:

    Ошибка аутентификации сообщения.
    Сервис: …
    Действие: http://schemas.xmlsoap.org/ws/2005/02 / trust / RST / SCT
    ClientIdentity:
    ActivityId:
    ArgumentNullException: значение не может быть нулевым.
    Название параметра: менеджер

    Я получал ту же ошибку. Я забыл добавить разрешение на чтение базы данных членства aspnetdb в (IIS APPPOOL DefaultAppPool).

    Ошибка аутентификации сообщения. Обслуживание:….

    Действие: http://schemas.xmlsoap.org/ws/2005/ 02 / trust / RST / SCT

    ClientIdentity:

    ActivityId:

    SqlException: не удается открыть базу данных «aspnetdb», запрошенную при входе в систему. Не удалось войти в систему.

    Ошибка входа для пользователя IIS APPPOOL DefaultAppPool.


    0

    Community
    20 Июн 2020 в 12:12

    Имя пользователя и пароль — это сервер, к которому вы подключаетесь , а не ваш имя пользователя и пароль для входа в систему.


    -4

    MapleStory
    23 Дек 2015 в 12:05

    When I try to call a WCF service I am getting the following message «An error occurred when verifying security for the message.»

    When I remove the custom authenication the service works no problem. I can’t figure out though what I have misconfigured in my web.config. Any insight would be appreciated.

      <system.serviceModel>
         <services>
            <service behaviorConfiguration="NAThriveExtensions.nableAPIBehavior"
              name="NAThriveExtensions.nableAPI">
               <endpoint 
                 address="" 
                 binding="basicHttpBinding" 
                 bindingConfiguration="basicHttpBinding_Secure"
                 contract="NAThriveExtensions.InableAPI">
               </endpoint>
               <endpoint 
                 address="mex" 
                 binding="mexHttpsBinding" 
                 contract="IMetadataExchange" />
            </service>
         </services>
         <behaviors>
            <serviceBehaviors>
              <behavior name="NAThriveExtensions.nableAPIBehavior">
                <serviceMetadata httpsGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="false" />
                <serviceCredentials>
                  <userNameAuthentication 
                    userNamePasswordValidationMode="Custom" 
                  customUserNamePasswordValidatorType= "NAThriveExtensions.Authentication, NAThriveExtensions" />
                </serviceCredentials>
              </behavior>
            </serviceBehaviors>
         </behaviors>
         <bindings>
           <basicHttpBinding>
             <binding name="basicHttpBinding_Secure">
               <security mode="TransportWithMessageCredential">
                 <message clientCredentialType="UserName"/>
               </security>
             </binding>
           </basicHttpBinding>
         </bindings>
      </system.serviceModel>
    

    asked Sep 21, 2010 at 23:26

    Matt Klepeis's user avatar

    Matt KlepeisMatt Klepeis

    1,7241 gold badge14 silver badges25 bronze badges

    I was getting this same error message and it turned out to be due to a time difference between my workstation machine and the server hosting the WCF service. The server was about 10 minutes behind my machine and WCF security doesn’t seem to like that very much.

    To find the root problem I turned on serviceSecurityAuditing in the server’s config file. Add the following to the configuration/system.serviceModel/behaviors/serviceBehaviors/behavior section for your service:

    <serviceSecurityAudit 
        auditLogLocation="Application" 
        serviceAuthorizationAuditLevel="Failure" 
        messageAuthenticationAuditLevel="Failure" 
        suppressAuditFailure="true"/>
    

    The following site was helpful in figuring this out:

    http://blogs.microsoft.co.il/blogs/urig/archive/2011/01/23/wcf-quot-an-error-occurred-when-verifying-security-for-the-message-quot-and-service-security-audit.aspx

    answered Mar 7, 2013 at 23:10

    Sam's user avatar

    3

    Another cause of this message is when some of your machines are not synchronized in time. WCF, by default, allows a five-minute gap; beyond this, it throws an error if things are out of synch.

    The solution is to synch all your machines. time.windows.com is notorious for not working, so I suggest using something else. (If you’re in a corporate environment, a local domain controller may be the correct choice here.)

    answered Jan 31, 2014 at 16:30

    ashes999's user avatar

    ashes999ashes999

    9,89715 gold badges72 silver badges120 bronze badges

    3

    This ended up being an problem on the consuming side, not with the service itself. Software AG’s webMethods 8 was consuming this server but there was no Security Handler added to the service so the credentials were not being added to the header thus resulting the in the aforementioned error.

    answered Oct 8, 2010 at 16:24

    Matt Klepeis's user avatar

    Matt KlepeisMatt Klepeis

    1,7241 gold badge14 silver badges25 bronze badges

    2

    I had a similar issue.
    I was building my datetime formatted strings using my local time, but my service/server was expecting GMT.

    I needed to get the GMT time (JAVA):

    final Date currentTime = new Date();    
    final SimpleDateFormat sdf = 
    new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'.000Z'");
    sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
    System.out.println(sdf.format(currentTime));
    

    answered Mar 17, 2019 at 20:42

    Pablo Chvx's user avatar

    Pablo ChvxPablo Chvx

    1,80918 silver badges31 bronze badges

    I was getting the same error on my IIS 7.5 server. I forgot to add Read permission on the certificate’s private key to the app pool virtual account (e.g. IIS AppPoolASP.NET v4.0).

    For info, whilst testing various combinations of accounts and permissions, I noticed that the app pool needed to be recycled to lose access to the key, once it had been retrieved once.

    (0x80131501 — An error occurred when verifying security for the message.)

    answered Apr 8, 2013 at 5:57

    ssg31415926's user avatar

    ssg31415926ssg31415926

    1,0372 gold badges13 silver badges21 bronze badges

    I was getting the same error and none of the above help for me.

    I finally tracked it down to connectionStrings in a parent web.config (my service was deployed to a child application to an admin site).

    Yes sounds ridiculous, but as soon as I wrapped the connection strings in the parent web.config with a location element all started working.

    For clarity, in parent web.config, I changed this

    <connectionStrings>
        <add name="..." />
    </connectionStrings>
    

    to this

    <location path="." inheritInChildApplications="false">
        <connectionStrings>
            <add name="..." />
        </connectionStrings>
    </location>
    

    Note this error also resulted in this very unhelpful serviceSecurityAudit log message:

    Message authentication failed.
    Service: …
    Action: http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT
    ClientIdentity:
    ActivityId:
    ArgumentNullException: Value cannot be null.
    Parameter name: manager

    answered Sep 6, 2016 at 12:30

    Dan's user avatar

    I was getting the same error. I forgot to add Read permission on the membership database aspnetdb to the (IIS APPPOOLDefaultAppPool).

    Message authentication failed. Service:….

    Action: http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT

    ClientIdentity:

    ActivityId:

    SqlException: Cannot open database «aspnetdb» requested by the login. The login failed.

    Login failed for user ‘IIS
    APPPOOLDefaultAppPool’.

    Community's user avatar

    answered Dec 19, 2016 at 7:24

    Yasser Mohammed's user avatar

    The username and password is the server you connection,not your
    system login username and password.

    answered Dec 23, 2015 at 9:05

    MapleStory's user avatar

    MapleStoryMapleStory

    6183 gold badges11 silver badges21 bronze badges

    Для мониторинга работоспособности ПО RusGuard Soft используется утилита RusGuard агент. Утилита устанавливается автоматически вместе с сервером RusGuard. RusGuard агент обеспечивает:

    контроль работоспособности серверных процессов (служб), соединений с сервером БД и сервером отчетов;

    оперативное оповещение пользователя о смене состояния контролируемых процессов;

    возможность изменения настроек соединения с сервером БД и сервером отчетов;

    проверку работоспособности соединения с сервером БД и сервером отчетов;

    возможность изменения настроек соединения с сервером БД и сервером отчетов;

    возможность настройки ручной или автоматической (по заданному расписанию) чистки БД (удаление событий до определенной даты).

    отображение информации о лицензиях и состоянии соответствующего ПО.

    регистрацию сервера в сервисе RusGuard Cloud.

    После установки серверной части программного комплекса RusGuard Soft, утилита запускается из меню Пуск ОС Windows и в дальнейшем всегда доступна в области уведомлений (системном трее) (см. рис. 1).

    RusGuard агент не будет отображаться в системном трее в случае смены текущего пользователя Windows на ПК.

    Запустить RusGuard агент можно вручную: Пуск > Все программы > папка RusGuard > RusGuard агент. Для автоматического запуска поместите ярлык RusGuard агент в меню Автозагрузка.

          Рисунок 1 -                  Утилита RusGuard агент  в системном трее

          Рисунок 1 —                
    Утилита RusGuard агент
    в системном трее

    Пиктограмма в системном трее может менять цвет в зависимости от текущего состояния (настроек) системы (подсистем) (см. табл. 1).

    Таблица 1 — Цветовые обозначения утилиты RusGuard агент. Общий случай (системный трей)

    Цвет пиктограммы

    Значение

    Система (подсистемы) работает нормально

    Система (одна или несколько подсистем) отключены пользователем (не запущены), но работоспособны (т.е. настройки корректны и связанные с ними компоненты функционируют нормально)

    Состояние системы (одной или нескольких подсистем) неизвестно, или подсистема не установлена

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

    Цвет пиктограммы в системном трее меняется на желтый, серый или красный при изменении состоянии хотя бы одной из подсистем. Вызвав RusGuard агент, пользователь может определить, где именно произошла смена состояния, ошибка или отключение.

    Интерфейс утилиты RusGuard агент состоит из набора вкладок, на каждой из которых отображается информация о состоянии основных подсистем программного комплекса и их отдельных компонентов. Для отображения состояния подсистем и компонентов используется та же цветовая схема, что и для оповещения пользователя в системном трее.

    Также в каждой вкладке предусмотрен набор инструментов для базовой отладки компонентов.

    Вкладка Сервисы

    На этой вкладке (см. рис. 2) отображается состояние серверных процессов и служб (см. табл. 2 и 3).

    Рисунок 2 - Утилита RusGuard агент. Вкладка Сервисы

    Рисунок 2 — Утилита RusGuard агент. Вкладка Сервисы

    Таблица 2 — Цветовые обозначения утилиты RusGuard агент. Вкладка Сервисы

    Цвет пиктограммы

    Значение

    Все сервисы работают нормально

    Один или несколько сервисов не запущены

    Сервис не установлен либо недоступен

    Ошибка при запуске одного или нескольких сервисов

    Таблица 3 — Управление работой сервисов

    Кнопка

    Значение

    Запуск всех сервисов

    Остановка всех сервисов

    Перезапуск IIS. Может потребоваться после редактирования параметров доступ к серверу БД и серверу отчетов (см. ниже), а также при различных сбоях работы АРМ

    Остановка того сервиса, напротив названия которого расположена кнопка

    Запуск того сервиса, напротив названия которого расположена кнопка

    Вкладка База данных

    На этой вкладке отображается состояние БД.

    Рисунок 3 - Утилита RusGuard агент. Вкладка База данных

    Рисунок 3 — Утилита RusGuard агент. Вкладка База данных

    На вкладке База данных отображается текущее состояние соединения с сервером БД (см. рис. 3), для уведомления пользователя об изменениях состояния используется стандартная цветовая схема утилиты (см. табл. 4).

    Таблица 4 — Цветовые обозначения утилиты RusGuard агент. Вкладка База данных

    Цвет пиктограммы

    Значение

    Соединение установлено

    Не прочитан файл конфигурации, но соединение работает

    Идет проверка соединения

    Ошибка соединения с БД

    Используя панель инструментов на вкладке (см. табл. 5), пользователь может:

    Отредактировать параметры соединения с сервером БД

    Проверить соединение с БД

    Загрузить базу данных

    Таблица 5 — Базовые настройки соединения с БД. Мониторинг БД

    Кнопка

    Значение

    Позволяет активировать поля ввода настроек соединения с сервером БД в нижней части вкладки (область Настройки соединения с базой данных) для их редактирования

    Кнопка становится активна после изменения настроек. Позволяет сохранить новые параметры соединения с БД

    Кнопка становится активна после изменения настроек соединения. Позволяет отменить новые параметры соединения с БД и вернуть прежние

    Проверка соединения с БД

    Создание новой базы данных на сервере БД. Используется в тех случаях, когда прежнюю БД потребовалось по той или иной причине удалить. Кнопка активна, когда база данных отсутствует. При этом отображается соответствующее сообщение

    Для того чтобы изменить настройки соединения с БД:

    1.Нажмите на кнопку .

    2.Введите новые параметры в  поля области Настройки соединения с базой данных (см. табл. 6).

    Таблица 6 — Поля формы для настройки соединения с БД

    Поле

    Значение и требования к заполнению

    Адрес и название инстанса сервера БД

    Адрес сервера БД, формируемый по следующему правилу (см. табл. 7):

    [Имя компьютера][Название экземпляра] 

    Если сервер RusGuard и сервер БД развертываются на одном компьютере, адрес примет вид:

    .[Название экземпляра]

    Значение параметра «Название экземпляра» зависит от типа экземпляра SQL Server («Экземпляр по умолчанию», «Именованный экземпляр», выбранного при его установке.

    Логин SQL сервер

    sa  (от «super administrator»)

    Пароль SQL сервер

    Пароль, заданный при установке сервера RusGuard (если устанавливался одновременно с SQL-сервером), либо при установке SQL-сервера (если конфигурация подразумевает его самостоятельную установку).

    3.Выполните проверку соединения .

    4.Если настройки корректны, нажмите на кнопку . В противном случае отмените изменения и введите корректные данные.

    5.Перезапустите все сервисы. Для этого:

    i.Перейдите на вкладку Сервисы.

    ii.Нажмите на кнопку и дождитесь остановки всех сервисов.

    iii.Нажмите на кнопку .

    iv.Нажмите на кнопку .

    Таблица 7 — Вид адреса инстанса сервера БД. В зависимости от типа конфигурации

    Тип конфигурации

    Вид адресной строки

    Сервер RusGuard сервер БД установлены на одном компьютере

    Если установка SQL-сервера выполнялась одновременно с установкой сервера RusGuard, экземпляр SQL-сервера получит имя RUSGUARD, и адрес будет выглядеть следующим образом:

     .RUSGUARD 

    Если SQL-сервер был установлен ранее в режиме наименования «Экземпляр по умолчанию«, то адрес сервера БД будет состоять только из точки (.)

    Если SQL-сервер был установлен раньше в режиме наименования «Именованный экземпляр» с именем SQLExpress (возможно и другое), то адрес сервера БД примет вид:

    .SQLExpress 

    Сервер RusGuard сервер БД установлены на разных компьютерах

    Если при установке SQL-сервера выбран режим наименования «Именованный экземпляр» с именем SQLExpress (возможно и другое, например, MyServer), то адрес примет вид:

    [hostname]SQLExpress

    Один из распространенных сбоев базы данных связан с остановкой SQL-сервера. Для устранения сбоя необходимо перезапустить SQL-сервер, используя SQL Server Configuration Manager (см. рис. 4).

    Рисунок 4 - Перезапуск экземпляра SQL-сервера

    Рисунок 4 — Перезапуск экземпляра SQL-сервера

    Вкладка Сервер отчетов

    На этой вкладке (см. рис. 5) выполняется настройка соединения с сервером отчетов.

    Рисунок 5 - Утилита RusGuard агент. Вкладка Сервер отчетов

    Рисунок 5 — Утилита RusGuard агент. Вкладка Сервер отчетов

    На вкладке отображается текущее состояние соединения с сервером отчетов, для уведомления пользователя об изменениях состояния используется стандартная цветовая схема утилиты (см. табл. 8).

    Таблица 8 — Цветовые обозначения утилиты RusGuard агент. Вкладка База данных

    Цвет пиктограммы

    Значение

    Соединение установлено

    Не прочитан файл конфигурации, но соединение работает

    Идет проверка соединения

    Ошибка соединения с сервером отчетов

    Используя панель инструментов на вкладке (см. табл. 9), пользователь может:

    редактировать параметры соединения с сервером отчетов;

    проверять состояние соединения;

    загружать отчеты на сервер.

    Таблица 9  Базовые настройки соединения с сервером отчетов

    Кнопка

    Значение

    Позволяет активировать поля ввода настроек соединения с сервером БД в нижней части вкладки (область Настройки соединения с сервером отчетов) для их редактирования

    Кнопка становится активна после изменения настроек. Позволяет сохранить новые параметры соединения с сервером отчетов

    Кнопка становится активна после изменения настроек соединения. Позволяет отменить новые параметры соединения с сервером отчетов и вернуть прежние

    Проверка соединения с сервером отчетов

    Создание чистой базы данных на сервере отчетов

    Создание источника данных на сервере

    Для того чтобы изменить настройки соединения с сервером отчетов:

    1.Нажмите на кнопку .

    2.Введите новые параметры в  поля области Настройки соединения с сервером отчетов. Используйте учетные данные, введенные при установке сервера RusGuard (или SQL-сервера, если он был установлен отдельно) (см. табл. 10).

    Таблица 10  — Формат ввода адреса сервера отчетов

    Поле

    Формат заполнения

    Cервер отчетов

    http://Имя сервера отчетов/ReportServer_Имя инстанса_SQL-сервера

    Примеры:

    http://ServerSQL /ReportServer_SqlExpress – подключение серверу отчетов (ServerSQL) с именем инстанса SqlExpress

    http://ServerSQL/ReportServer – подключение к серверу отчетов (ServerSQL) с пустым именем инстанса

    Предупреждение: Недопустимо использование в строке подключения адресов типа 127.0.0.1 и localhost.

    3.Выполните проверку соединения .

    4.Если настройки корректны, нажмите на кнопку . В противном случае отмените изменения и введите корректные данные.

    5.Перезапустите все сервисы. Для этого:

    I.Перейдите на вкладку Сервисы.

    II.Нажмите на кнопку и дождитесь остановки всех сервисов.

    III.Нажмите на кнопку .

    IV.Нажмите на кнопку .

    Вкладка Управление событиями

    На вкладке Управление событиями (см. рис. 6) пользователь может:

    Вручную удалить события до выбранной даты (включительно);

    Настроить автоматическое удаление событий.

    Рисунок 6 - Утилита RusGuard агент. Вкладка Управление событиями

    Рисунок 6 — Утилита RusGuard агент. Вкладка Управление событиями

    Для того чтобы удалить события вручную:

    1.Нажмите на кнопку .

    Активируются все поля ввода дат на вкладке.

    2.В поле Удалить события до дд.мм.гггг включительно области Ручное удаление событий введите дату.

    Дата вводится при помощи календаря, который всплывает при щелчке мышью внутри поля.

    После ввода даты активируется кнопка Удалить события.

    3.Нажмите на кнопку Удалить события.

    Система начинает процесс удаления. Ход процесса отображается во всплывающем окне.

    Для того чтобы настроить автоматическое удаление:

    1.Нажмите на кнопку .

    Активируются все поля ввода на вкладке.

    2.Введите период хранения событий в поле Хранить события за _х_  месяцев области Автоматическое удаление событий.

    3.В поле Запускать удаление _чч:мм_ в выберите частоту и время очистки базы данных событий (см. рис. 7).

    Рисунок 7 - Утилита RusGuard агент. Вкладка Управление событиями. Настройка автоматического удаления

    Рисунок 7 — Утилита RusGuard агент. Вкладка Управление событиями. Настройка автоматического удаления

    После ввода даты активируется кнопка . Также активируется кнопка , которая позволяет сбросить введенные данные.

    4.Нажмите на кнопку .

    Система применит настройки.

    Вкладка Лицензии

    Рисунок 8 - Утилита RusGuard агент. Вкладка Лицензии

    Рисунок 8 — Утилита RusGuard агент. Вкладка Лицензии

    На вкладке Лицензии (см. рис. 8) отображается список подключенных лицензий и состояние связанного с ними ПО (например, драйверов).

    Локализация ошибки. Компоненты

    АРМ (распределенный вариант установки) и сервер RusGuard. Все версии ПО.

    Описание причин и устранение ошибки

    Если время и дата настроены некорректно, возможно возникновение ошибки при запуске ПО (см. рис. 7). Для исправления ошибки необходимо привести локальные настройки времени и даты в соответствие с сервером. Допустимое расхождение: +/- 5 минут.

    Рисунок 7 - Ошибка при запуске ПО. Некорректно выставлено время и дата на локальном ПК

    Рисунок 7 — Ошибка при запуске ПО. Некорректно выставлено время и дата на локальном ПК

    Пример

    Корректная настройка

    В таблице ниже приведены примеры корректной настройки времени/даты (см. табл. 1).

    Таблица 1 — Пример правильной настройки времени/даты

    Сервер

    АРМ

    Время 16.50 (часовой пояс +4)

    Время 16.50 (часовой пояс +4)

    Время 16.50 (часовой пояс +4)

    Время 15.50 (часовой пояс +3)

    Время 16.50 (часовой пояс +4)

    Время 17.50 (часовой пояс +5)

    Некорректная настройка

    В таблице ниже (см. табл. 2) приведены примеры некорректной настройки времени/даты:

    одинаковое время при разных часовых поясах;

    разное время в одном часовом поясе.

    Таблица 2 — Пример неправильной настройки времени/даты

    Сервер

    АРМ

    Время 16.50 (часовой пояс +4)

    Время 16.40 (часовой пояс +4)

    Время 16.50 (часовой пояс +4)

    Время 16.50 (часовой пояс +3)

    Время 16.50 (часовой пояс +4)

    Время 16.50 (часовой пояс +5)

    Произошла ошибка при проверке безопасности сообщения

    когда я пытаюсь вызвать службу WCF я получаю следующее сообщение «произошла ошибка при проверке безопасности сообщения.»

    когда я удаляю пользовательскую аутентификацию, служба работает без проблем. Я не могу понять, что я неправильно сконфигурировал в своей сети.конфиг. Любое понимание будет оценено.

      <system.serviceModel>
         <services>
            <service behaviorConfiguration="NAThriveExtensions.nableAPIBehavior"
              name="NAThriveExtensions.nableAPI">
               <endpoint 
                 address="" 
                 binding="basicHttpBinding" 
                 bindingConfiguration="basicHttpBinding_Secure"
                 contract="NAThriveExtensions.InableAPI">
               </endpoint>
               <endpoint 
                 address="mex" 
                 binding="mexHttpsBinding" 
                 contract="IMetadataExchange" />
            </service>
         </services>
         <behaviors>
            <serviceBehaviors>
              <behavior name="NAThriveExtensions.nableAPIBehavior">
                <serviceMetadata httpsGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="false" />
                <serviceCredentials>
                  <userNameAuthentication 
                    userNamePasswordValidationMode="Custom" 
                  customUserNamePasswordValidatorType= "NAThriveExtensions.Authentication, NAThriveExtensions" />
                </serviceCredentials>
              </behavior>
            </serviceBehaviors>
         </behaviors>
         <bindings>
           <basicHttpBinding>
             <binding name="basicHttpBinding_Secure">
               <security mode="TransportWithMessageCredential">
                 <message clientCredentialType="UserName"/>
               </security>
             </binding>
           </basicHttpBinding>
         </bindings>
      </system.serviceModel>
    

    7 ответов


    Я получал это же сообщение об ошибке, и оказалось, что это связано с разницей во времени между моей рабочей станцией и сервером, на котором размещена служба WCF. Сервер был около 10 минут позади моей машины, и WCF security, похоже, не очень нравится.

    чтобы найти корневую проблему, я включил serviceSecurityAuditing в конфигурационном файле сервера. Добавьте в конфигурацию/систему следующее.serviceModel / поведение / serviceBehaviors / раздел поведение для вашего обслуживания:

    <serviceSecurityAudit 
        auditLogLocation="Application" 
        serviceAuthorizationAuditLevel="Failure" 
        messageAuthenticationAuditLevel="Failure" 
        suppressAuditFailure="true"/>
    

    следующий сайт был полезен в выяснении этого:

    http://blogs.microsoft.co.il/blogs/urig/archive/2011/01/23/wcf-quot-an-error-occurred-when-verifying-security-for-the-message-quot-and-service-security-audit.aspx


    другая причина это сообщение, когда некоторые из ваших машин не синхронизированы во времени. WCF по умолчанию допускает пятиминутный разрыв; кроме того, он выдает ошибку, если что-то не синхронизировано.

    раствор для синхронизации всех ваших машин. time.windows.com славится тем, что не работает, поэтому я предлагаю использовать что-то другое. (Если вы находитесь в корпоративной среде, локальный контроллер домена может быть правильный выбор.)


    Это оказалось проблемой на стороне потребления, а не с самой службой. Webmethods 8 программного обеспечения AG потреблял этот сервер, но не было никакого обработчика безопасности, добавленного к службе, поэтому учетные данные не были добавлены в заголовок, что привело к вышеупомянутой ошибке.


    Я получаю ту же ошибку на моем сервере IIS 7.5. Я забыл добавить разрешение на чтение на закрытый ключ сертификата в виртуальный аккаунт пула приложений (например, IIS AppPoolASP.NET v4.0).

    для информации, тестируя различные комбинации учетных записей и разрешений, я заметил, что пул приложений необходимо переработать, чтобы потерять доступ к ключу, как только он был извлечен один раз.

    (0x80131501-произошла ошибка при проверке безопасности сообщение.)


    Я получал ту же ошибку, и ни одна из вышеперечисленных помощь для меня.

    Я, наконец, отследил его до connectionStrings в родительской сети.config (моя служба была развернута в дочернем приложении на сайте администратора).

    Да, звучит смешно, но как только я завернул строки подключения в родительской сети.config с элементом location все начали работать.

    для ясности, в родительской сети.config я изменил это

    <connectionStrings>
        <add name="..." />
    </connectionStrings>
    

    в это

    <location path="." inheritInChildApplications="false">
        <connectionStrings>
            <add name="..." />
        </connectionStrings>
    </location>
    

    обратите внимание, что эта ошибка также привела к этому очень бесполезному serviceSecurityAudit сообщение:

    ошибка проверки подлинности сообщения.
    Услуга. :..
    Действие:http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT
    ClientIdentity:
    Значение activityid:
    ArgumentNullException: значение не может быть null.
    Имя параметра: менеджер


    Я получал ту же ошибку. Я забыл добавить разрешение на чтение в базу данных членства aspnetdb в (IIS APPPOOLDefaultAppPool).

    ошибка проверки подлинности сообщения. Услуга.:…

    действие:http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT

    ClientIdentity:

    значение activityid:

    SqlException: не удается открыть базу данных «aspnetdb», запрошенную логином. Ошибка входа в систему.

    ошибка входа в систему для IIS пользователя
    Пула средством’.


    имя пользователя и пароль сервер подключения,а не ваши
    имя пользователя и пароль для входа в систему.



    Offline

    pavel.kozak

     


    #1
    Оставлено
    :

    10 января 2020 г. 10:23:50(UTC)

    pavel.kozak

    Статус: Участник

    Группы: Участники

    Зарегистрирован: 13.12.2019(UTC)
    Сообщений: 15
    Российская Федерация

    Добрый день.

    Пока вопрос туманный, т.к. нет полного понимания происходящего.

    Есть устоявшийся проект с использованием КриптоПро 4.0 + КриптоПро .NET (6893 работает стабильно), используется для подключения к Web сервису по WCF (Гост 2012).

    Начали миграцию проекта на NET Core 3.x + .NET Framework 4.7.2, до этого была смесь Core 2.x + .NET Framework 4.6.1.

    Предположительно(т.к. ставим средствами VS 2019, что он там ещё тянет под сомнением) после установки на машину SDK Core 3.x + SDK .NET Framework 4.8 + соответственно сам коре и фреймфорк получаем проблемы с WCF в существующем проекте, т.е. изменений в сам проект ещё не внесли, только установили Core + FrameWork посвежее.

    При попытке подключения к сервису с авторизацией по ГОСТ ключу 2012, получаем ошибку:

    Коллекция шифрования маркера не поддерживает алгоритм «urn:ietf:params:xml:ns:cpxmlsec:algorithms:transport-gost2012-256».

    Т.е. поведение, как будто не установлен КриптоПро .NET. Переустанавливаем весь комплект КриптоПро + КриптоПро .NET. Результата нет.

    Проверено на двух машинах Windows 10 И Windows Server 2012 R2.
    Сответсвующие лицензии есть и на рабочие станции и на сервер.
    Для проверки пришлось VS 2019 на сервер поставить, т.к. думали причина в Windows 10.

    Интересный момент, попробовали поднять версию Крипто Про .NET (SDK Крипто Про .NET поднимали соответственно) до 7132

    Выше указанная ошибка на этапе подключения пропала, но при вызове получили другую ошибку:
    System.ServiceModel.FaultException: An error occurred when verifying security for the message.

    Попробую узнать какую версию SDK Крипто Про использует поставщик Web Сервиса.

    Отредактировано пользователем 10 января 2020 г. 10:25:30(UTC)
     | Причина: Не указана


    Вверх

    Offline

    Максим Коллегин

     


    #2
    Оставлено
    :

    10 января 2020 г. 10:54:47(UTC)

    Максим Коллегин

    Статус: Сотрудник

    Группы: Администраторы

    Зарегистрирован: 12.12.2007(UTC)
    Сообщений: 6,253
    Мужчина
    Откуда: КРИПТО-ПРО

    Сказал «Спасибо»: 21 раз
    Поблагодарили: 658 раз в 582 постах

    Обновлять КриптоПро .Net при обновлении .Net нужно с вероятностью 90%
    Для .Net Core мы делаем fork (обсуждается в соседней ветке), но до WCF там ещё далеко.

    Знания в базе знаний, поддержка в техподдержке


    Вверх

    WWW


    Offline

    pavel.kozak

     


    #3
    Оставлено
    :

    10 января 2020 г. 11:02:18(UTC)

    pavel.kozak

    Статус: Участник

    Группы: Участники

    Зарегистрирован: 13.12.2019(UTC)
    Сообщений: 15
    Российская Федерация

    Спасибо.

    Да, форк видели но не решились, поэтому и смесь Core 98% + Framework 2%.

    Сосредоточимся тогда на вопросе почему не работает с .NET КриптоПро 7132.

    Попробуем ещё раз пересобрать с новым SDK 7132, может что-то упустил.

    Насколько важно, что бы .NET КриптоПро был одинаковый на клиенте и на сервере?
    Мне кажется должно быть все равно. На сервер повлиять мы не сможем.


    Вверх

    Offline

    Максим Коллегин

     


    #4
    Оставлено
    :

    10 января 2020 г. 11:11:32(UTC)

    Максим Коллегин

    Статус: Сотрудник

    Группы: Администраторы

    Зарегистрирован: 12.12.2007(UTC)
    Сообщений: 6,253
    Мужчина
    Откуда: КРИПТО-ПРО

    Сказал «Спасибо»: 21 раз
    Поблагодарили: 658 раз в 582 постах

    Автор: pavel.kozak Перейти к цитате

    Насколько важно, что бы .NET КриптоПро был одинаковый на клиенте и на сервере?
    Мне кажется должно быть все равно. На сервер повлиять мы не сможем.

    Не должны быть одинаковыми.

    Постарайтесь собрать трассировку WCF — посмотрим.

    Знания в базе знаний, поддержка в техподдержке


    Вверх

    WWW


    Offline

    pavel.kozak

     


    #5
    Оставлено
    :

    10 января 2020 г. 13:10:45(UTC)

    pavel.kozak

    Статус: Участник

    Группы: Участники

    Зарегистрирован: 13.12.2019(UTC)
    Сообщений: 15
    Российская Федерация

    Пересобрал с последним SDK.

    Если по трейсу, то получается следующий порядок:

    Пытаемся вызвать удаленную функцию TestAuthentication

    Поставщик токена безопасности открыт.
    На клиенте запущен сеанс безопасности.
    Подлинность EndpointReference была определена.
    Успешно выполнена аутентификациа.
    Протокол безопасности обеспечил защиту исходящего сообщения.
    Через канал отправлено сообщение
    Через канал получено сообщение
    Через канал запроса получен ответ.

    Генерирование исключения
    «Процессору безопасности не удалось найти заголовок безопасности в сообщении. Это может быть вызвано тем, что сообщение не защищено или имеет место несоответствия привязки между взаимодействующими сторонами. Это может произойти, если служба настроена с режимом безопасности, а клиент не применяет режим безопасности.»

    Незащищенное или неправильно защищенное сообщение об ошибке было получено от другой стороны.

    Протоколу безопасности не может проверить входящее сообщение.

    Конец.

    Тот же код с предыдущей версией работает корректно. Пока не возможности проверить на чистой машине свежий SDK КриптоПро на старом фреймвекке.


    Вверх

    Offline

    pavel.kozak

     


    #6
    Оставлено
    :

    10 января 2020 г. 13:19:38(UTC)

    pavel.kozak

    Статус: Участник

    Группы: Участники

    Зарегистрирован: 13.12.2019(UTC)
    Сообщений: 15
    Российская Федерация

    Автор: Максим Коллегин Перейти к цитате

    Не должны быть одинаковыми.
    Постарайтесь собрать трассировку WCF — посмотрим.

    Оказывается, все таки есть зависимости.

    https://br.so-ups.ru/Pub…ws=%5Bobject%20Object%5D

    Как-то упустил эту новость.

    Теперь тупичок, придется ещё одну кашу делать и запускать прослойку на машине со старым фремвёрком и старым .NET КриптоПро :(.


    Вверх

    Offline

    Максим Коллегин

     


    #7
    Оставлено
    :

    10 января 2020 г. 20:27:26(UTC)

    Максим Коллегин

    Статус: Сотрудник

    Группы: Администраторы

    Зарегистрирован: 12.12.2007(UTC)
    Сообщений: 6,253
    Мужчина
    Откуда: КРИПТО-ПРО

    Сказал «Спасибо»: 21 раз
    Поблагодарили: 658 раз в 582 постах

    Странно, ничего не слышал про это. Изучим вопрос.

    Знания в базе знаний, поддержка в техподдержке


    Вверх

    WWW


    Offline

    Артём Макаров

     


    #8
    Оставлено
    :

    13 января 2020 г. 8:31:35(UTC)

    Артём Макаров

    Статус: Сотрудник

    Группы: Участники

    Зарегистрирован: 20.02.2017(UTC)
    Сообщений: 184

    Сказал(а) «Спасибо»: 4 раз
    Поблагодарили: 48 раз в 48 постах

    Добрый день.

    Подскажите, какой сейчас target framework задан в проекте?

    Какая привязка используется?

    Если возможно приложите файл конфигурации клиента (app.config).

    Можете приложить wcf trace и messssage log с ошибкой?

    Как собирать можно посмотреть тут — https://docs.microsoft.c…figuring-message-logging
    Пример —

    Код:

    <system.diagnostics>
    	<sources>
    	  <source name="System.ServiceModel.MessageLogging" switchValue="All">
    		<listeners>
    		  <add type="System.Diagnostics.DefaultTraceListener" name="Default">
    			<filter type="" />
    		  </add>
    		  <add name="ServiceModelMessageLoggingListener">
    			<filter type="" />
    		  </add>
    		</listeners>
    	  </source>
    	  <source name="System.ServiceModel" switchValue="All" propagateActivity="true">
    		<listeners>
    		  <add type="System.Diagnostics.DefaultTraceListener" name="Default">
    			<filter type="" />
    		  </add>
    		  <add name="ServiceModelTraceListener">
    			<filter type="" />
    		  </add>
    		</listeners>
    	  </source>
    	</sources>
    	<sharedListeners>
    	  <add initializeData="C:logsmy_service_web_messages.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelMessageLoggingListener" traceOutputOptions="Timestamp">
    		<filter type="" />
    	  </add>
    	  <add initializeData="C:logsmy_serice_web_tracelog.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelTraceListener" traceOutputOptions="Timestamp">
    		<filter type="" />
    	  </add>
    	</sharedListeners>
    	<trace autoflush="true" />
      </system.diagnostics>

    Техническую поддержку оказываем тут
    Наша база знаний


    Вверх

    Offline

    pavel.kozak

     


    #9
    Оставлено
    :

    13 января 2020 г. 10:01:40(UTC)

    pavel.kozak

    Статус: Участник

    Группы: Участники

    Зарегистрирован: 13.12.2019(UTC)
    Сообщений: 15
    Российская Федерация

    Автор: Максим Коллегин Перейти к цитате

    Странно, ничего не слышал про это. Изучим вопрос.

    Насколько успел узнать, тикет поставщиком сервиса создавался, примерно в то время когда они писали эту новость.


    Вверх

    Offline

    pavel.kozak

     


    #10
    Оставлено
    :

    13 января 2020 г. 10:11:57(UTC)

    pavel.kozak

    Статус: Участник

    Группы: Участники

    Зарегистрирован: 13.12.2019(UTC)
    Сообщений: 15
    Российская Федерация

    Автор: Артём Макаров Перейти к цитате

    Подскажите, какой сейчас target framework задан в проекте?

    Проверяли несколько, поведение и ошибка одинаковые и на 4.6.2, 4.7.1, 4.8.
    Версия .NET Крипто про — 7132. Основной Крипто Про ставился последний 4.0, 9963.

    Автор: Артём Макаров Перейти к цитате

    Какая привязка используется?

    WSHttpBinding

    Это пример со стенда, в основном проекте вместо конфига настройка из кода идет. Но значения те же.

    <wsHttpBinding>
    <binding name=»wsHttpCertificateBinding» closeTimeout=»01:00:00″ openTimeout=»01:00:00″ receiveTimeout=»01:00:00″ sendTimeout=»01:00:00″
    maxBufferPoolSize=»52428800″ maxReceivedMessageSize=»52428800″>
    <readerQuotas maxStringContentLength=»2147483647″/>
    <security>
    <message clientCredentialType=»Certificate» negotiateServiceCredential=»false»/>
    </security>
    </binding>
    </wsHttpBinding>

    <endpoint address=»http://br.so-ups.ru:8091/PersonalApi/PersonalApiService.svc/ByCertificate»
    binding=»wsHttpBinding» bindingConfiguration=»wsHttpCertificateBinding»
    contract=»PersonalApiService.IPersonalApiService» name=»wsHttpCertificateEndpoint»>
    <identity>
    <certificateReference findValue=»5cee4b2593de373e184377a718bb5af83dea466b» x509FindType=»FindByThumbprint»
    storeLocation=»LocalMachine» storeName=»My» />
    </identity>
    </endpoint>

    Автор: Артём Макаров Перейти к цитате

    Можете приложить wcf trace и messssage log с ошибкой?

    Я отправлю в личку, то что собрали в пятницу с нашими настройками, если не подойдет, то позже сниму с вашими рекомендациями.


    Вверх
    Пользователи, просматривающие эту тему

    Guest

    Быстрый переход
     

    Вы не можете создавать новые темы в этом форуме.

    Вы не можете отвечать в этом форуме.

    Вы не можете удалять Ваши сообщения в этом форуме.

    Вы не можете редактировать Ваши сообщения в этом форуме.

    Вы не можете создавать опросы в этом форуме.

    Вы не можете голосовать в этом форуме.

    When I try to call a WCF service I am getting the following message «An error occurred when verifying security for the message.»

    When I remove the custom authenication the service works no problem. I can’t figure out though what I have misconfigured in my web.config. Any insight would be appreciated.

      <system.serviceModel>
         <services>
            <service behaviorConfiguration="NAThriveExtensions.nableAPIBehavior"
              name="NAThriveExtensions.nableAPI">
               <endpoint 
                 address="" 
                 binding="basicHttpBinding" 
                 bindingConfiguration="basicHttpBinding_Secure"
                 contract="NAThriveExtensions.InableAPI">
               </endpoint>
               <endpoint 
                 address="mex" 
                 binding="mexHttpsBinding" 
                 contract="IMetadataExchange" />
            </service>
         </services>
         <behaviors>
            <serviceBehaviors>
              <behavior name="NAThriveExtensions.nableAPIBehavior">
                <serviceMetadata httpsGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="false" />
                <serviceCredentials>
                  <userNameAuthentication 
                    userNamePasswordValidationMode="Custom" 
                  customUserNamePasswordValidatorType= "NAThriveExtensions.Authentication, NAThriveExtensions" />
                </serviceCredentials>
              </behavior>
            </serviceBehaviors>
         </behaviors>
         <bindings>
           <basicHttpBinding>
             <binding name="basicHttpBinding_Secure">
               <security mode="TransportWithMessageCredential">
                 <message clientCredentialType="UserName"/>
               </security>
             </binding>
           </basicHttpBinding>
         </bindings>
      </system.serviceModel>
    

    asked Sep 21, 2010 at 23:26

    Matt Klepeis's user avatar

    Matt KlepeisMatt Klepeis

    1,7241 gold badge14 silver badges25 bronze badges

    I was getting this same error message and it turned out to be due to a time difference between my workstation machine and the server hosting the WCF service. The server was about 10 minutes behind my machine and WCF security doesn’t seem to like that very much.

    To find the root problem I turned on serviceSecurityAuditing in the server’s config file. Add the following to the configuration/system.serviceModel/behaviors/serviceBehaviors/behavior section for your service:

    <serviceSecurityAudit 
        auditLogLocation="Application" 
        serviceAuthorizationAuditLevel="Failure" 
        messageAuthenticationAuditLevel="Failure" 
        suppressAuditFailure="true"/>
    

    The following site was helpful in figuring this out:

    http://blogs.microsoft.co.il/blogs/urig/archive/2011/01/23/wcf-quot-an-error-occurred-when-verifying-security-for-the-message-quot-and-service-security-audit.aspx

    answered Mar 7, 2013 at 23:10

    Sam's user avatar

    3

    Another cause of this message is when some of your machines are not synchronized in time. WCF, by default, allows a five-minute gap; beyond this, it throws an error if things are out of synch.

    The solution is to synch all your machines. time.windows.com is notorious for not working, so I suggest using something else. (If you’re in a corporate environment, a local domain controller may be the correct choice here.)

    answered Jan 31, 2014 at 16:30

    ashes999's user avatar

    ashes999ashes999

    9,84715 gold badges72 silver badges120 bronze badges

    3

    This ended up being an problem on the consuming side, not with the service itself. Software AG’s webMethods 8 was consuming this server but there was no Security Handler added to the service so the credentials were not being added to the header thus resulting the in the aforementioned error.

    answered Oct 8, 2010 at 16:24

    Matt Klepeis's user avatar

    Matt KlepeisMatt Klepeis

    1,7241 gold badge14 silver badges25 bronze badges

    2

    I had a similar issue.
    I was building my datetime formatted strings using my local time, but my service/server was expecting GMT.

    I needed to get the GMT time (JAVA):

    final Date currentTime = new Date();    
    final SimpleDateFormat sdf = 
    new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'.000Z'");
    sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
    System.out.println(sdf.format(currentTime));
    

    answered Mar 17, 2019 at 20:42

    Pablo Chvx's user avatar

    Pablo ChvxPablo Chvx

    1,74917 silver badges31 bronze badges

    I was getting the same error on my IIS 7.5 server. I forgot to add Read permission on the certificate’s private key to the app pool virtual account (e.g. IIS AppPoolASP.NET v4.0).

    For info, whilst testing various combinations of accounts and permissions, I noticed that the app pool needed to be recycled to lose access to the key, once it had been retrieved once.

    (0x80131501 — An error occurred when verifying security for the message.)

    answered Apr 8, 2013 at 5:57

    ssg31415926's user avatar

    ssg31415926ssg31415926

    1,0172 gold badges13 silver badges21 bronze badges

    I was getting the same error and none of the above help for me.

    I finally tracked it down to connectionStrings in a parent web.config (my service was deployed to a child application to an admin site).

    Yes sounds ridiculous, but as soon as I wrapped the connection strings in the parent web.config with a location element all started working.

    For clarity, in parent web.config, I changed this

    <connectionStrings>
        <add name="..." />
    </connectionStrings>
    

    to this

    <location path="." inheritInChildApplications="false">
        <connectionStrings>
            <add name="..." />
        </connectionStrings>
    </location>
    

    Note this error also resulted in this very unhelpful serviceSecurityAudit log message:

    Message authentication failed.
    Service: …
    Action: http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT
    ClientIdentity:
    ActivityId:
    ArgumentNullException: Value cannot be null.
    Parameter name: manager

    answered Sep 6, 2016 at 12:30

    Dan's user avatar

    I was getting the same error. I forgot to add Read permission on the membership database aspnetdb to the (IIS APPPOOLDefaultAppPool).

    Message authentication failed. Service:….

    Action: http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT

    ClientIdentity:

    ActivityId:

    SqlException: Cannot open database «aspnetdb» requested by the login. The login failed.

    Login failed for user ‘IIS
    APPPOOLDefaultAppPool’.

    Community's user avatar

    answered Dec 19, 2016 at 7:24

    Yasser Mohammed's user avatar

    The username and password is the server you connection,not your
    system login username and password.

    answered Dec 23, 2015 at 9:05

    MapleStory's user avatar

    MapleStoryMapleStory

    6183 gold badges11 silver badges21 bronze badges

    У меня проблема с подключением к моей службе WCF с помощью clientCredentialType="UserName".

    Когда я запускаю код ниже, я получаю сообщение об ошибке

    FaultException: при проверке безопасности для сообщения произошла ошибка.

    При игре с некоторыми значениями привязки я также получаю Access is denied..

    Fiddler говорит, что нет заголовка авторизации, и я не могу найти имя пользователя или пароль в запросе.

    Вот выдержки из моего конфига:

      <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>
      </system.webServer>
        <services>
          <service name="InventoryServices.MobileAPI"  behaviorConfiguration="customBehaviour">
            <endpoint address=""
                      binding="basicHttpBinding"
                      bindingConfiguration="secureHttpBinding"
                      contract="InventoryServices.IMobileAPI"/>
    
            <endpoint address="mex"
                      binding="mexHttpsBinding"
                      contract="IMetadataExchange" />
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="customBehaviour">
              <serviceSecurityAudit auditLogLocation="Application" serviceAuthorizationAuditLevel="Failure" messageAuthenticationAuditLevel="Failure" suppressAuditFailure="true" />
              <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
              <serviceMetadata httpsGetEnabled="true"/>
              <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
              <serviceDebug includeExceptionDetailInFaults="true"/>
              <serviceCredentials>
                <userNameAuthentication userNamePasswordValidationMode="Custom"
                   customUserNamePasswordValidatorType="InventoryLibrary.Helpers.UserAuthentication,InventoryLibrary"/>
              </serviceCredentials>
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
        <bindings>
          <basicHttpBinding>
            <binding name="secureHttpBinding">
              <security mode="TransportWithMessageCredential">
                <transport clientCredentialType="Basic" proxyCredentialType="Basic" realm="MyRealm"/>
                <message clientCredentialType="UserName" algorithmSuite="Default"  />
              </security>
            </binding>
          </basicHttpBinding>
        </bindings>
    

    Мой валидатор имени пользователя/пароля выглядит так:

      public class UserAuthentication : UserNamePasswordValidator {
            public override void Validate(string userName, string password) {
    
                EntitiesContext db = new EntitiesContext();
                db.Logs.Add(new DomainModels.Log() {
                    DateLogged = DateTime.Now,
                    Message = "hit auth",
                    Type = DomainModels.LogType.Info
                });
                db.SaveChanges();
    
                try {
    
                    if (userName == "test" && password == "test123") {
                        Console.WriteLine("Authentic User");
                    }
                }
                catch (Exception ex) {
                    throw new FaultException("Unknown Username or Incorrect Password");
                }
            }
        }
    

    У меня это как простой тест на моем сервисе:

    [OperationContract]
    [XmlSerializerFormat]
    void Test();
    
    [PrincipalPermission(SecurityAction.Demand, Name = "test")]
    public void Test() {
    
    }
    

    У меня есть собственный сертификат SSL на моем сервере, и я могу получить доступ к своим сервисам/метаданным.

    Затем я добавил ссылку на службу в консольном приложении и попытаюсь подключиться к службе с помощью этого кода ниже:

    class Program {
        static void Main(string[] args) {
    
            Stuff.InitiateSSLTrust();
    
            BasicHttpBinding binding = new BasicHttpBinding();
            binding.Security.Mode = BasicHttpSecurityMode.Transport;
            binding.Security.Transport.Realm = "MyRealm";
    
            ServiceReference1.MobileAPIClient serviceProxy = new ServiceReference1.MobileAPIClient(binding, new EndpointAddress("https://xx.xx.xx.xx/InventoryServices.MobileApi.svc"));
    
            serviceProxy.ClientCredentials.UserName.UserName = "test";
            serviceProxy.ClientCredentials.UserName.Password = "test123";
    
            try {
    
                var a = serviceProxy.Login("a", "b");
            }
            catch (Exception ex) {
                var ex2 = ex;
            }
        }
    }
    
    public class Stuff {
        public static void InitiateSSLTrust() {
            try {
                //Change SSL checks so that all checks pass
                ServicePointManager.ServerCertificateValidationCallback =
                    new RemoteCertificateValidationCallback(
                        delegate { return true; }
                    );
            }
            catch (Exception ex) {
            }
        }
    }
    

    Я проверил средство просмотра событий на сервере, и эта ошибка появляется с каждым запросом:

    MessageSecurityException: процессору безопасности не удалось найти заголовок безопасности в сообщении. Это может быть связано с тем, что сообщение является необеспеченной ошибкой или потому, что существует связующее несоответствие между общающимися сторонами. Это может произойти, если служба настроена для обеспечения безопасности, а клиент не использует безопасность.

    Ответ 1

    Вы указываете стороне клиента использовать BasicHttpSecurityMode.Transport, тогда как служба ожидает BasicHttpSecurityMode.TransportWithMessageCredential. Это проблема, потому что служба ищет учетные данные клиента в заголовке сообщения SOAP, и клиент не отправит их с привязкой, сконфигурированной таким образом.

    Следовательно, поэтому пара имени пользователя/пароля отсутствует в заголовке сообщения, когда вы являетесь свидетелем. Таким образом, зритель событий был прав, что между связующими сторонами имело место несовпадение.

    Также установите ClientCredentialType на клиенте BasicHttpMessageCredentialType.UserName для Message уровня безопасности. По умолчанию BasicHttpBinding использует None, которые являются анонимными клиентами.

    Здесь фрагмент кода, описывающий вышеизложенные изменения:

    var basicHttpBinding = new BasicHttpBinding(
                                  BasicHttpSecurityMode.TransportWithMessageCredential);
    basicHttpBinding.Security.Message.ClientCredentialType = 
                                         BasicHttpMessageCredentialType.UserName;
    

    Ответ 2

    Это также может быть вызвано отсутствием синхронизации между клиентом и сервером. Если сертификат или подписанный токен являются недействительными по времени, то может быть возвращено то же сообщение An error occurred when verifying security for the message..

    • Remove From My Forums
    • Вопрос

    • Добрый день, господа. Подскажите, куда копать.

      Windows Server 2008 R2 32 bit.

      В IIS развернут узел,  — сайт web-forms,с аутентификацией по сертификату. 

      Есть ссылка на wcf, от которой получает данные. 

       При запускe на iisexpress через VS2013 в режиме отладки — все хорошо. После публикации и размещения на вышеуказанном сервере — вот такая ошибка:

      Ошибка сервера в приложении ‘/’.


      Описание: Необработанное исключение при выполнении текущего веб-запроса. Изучите трассировку стека для получения дополнительных сведений о данной ошибке и о вызвавшем ее фрагменте кода.

      Сведения об исключении: System.ServiceModel.FaultException: An error occurred when verifying security for the message.

      Ошибка источника:

      Необработанное исключение при выполнении текущего веб-запроса. Информацию о происхождении и месте возникновения исключения можно получить, используя следующую трассировку стека исключений.

      Трассировка стека:

      [FaultException: An error occurred when verifying security for the message.]
      
      [MessageSecurityException: Незащищенное или неправильно защищенное сообщение об ошибке было получено от другой стороны. Код ошибки и описание см. внутреннее исключение.]
         System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) +10818447
         System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) +336
         Service_portal.ServiceReference.IHotLine.GetData(String ProcName, CustomParams[] _params, String DBname) +0
         Service_portal.ContactClass.AddParams(String name, String value, String proc, String dbnum) +276
         Service_portal.ControlDistionary.Page_Load(Object sender, EventArgs e) +59
         System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +51
         System.Web.UI.Control.OnLoad(EventArgs e) +92
         System.Web.UI.Control.LoadRecursive() +54
         System.Web.UI.Control.LoadRecursive() +145
         System.Web.UI.Control.LoadRecursive() +145
         System.Web.UI.Control.LoadRecursive() +145
         System.Web.UI.Control.LoadRecursive() +145
         System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +772
      

      • Перемещено

        26 марта 2015 г. 11:36

    Ответы

    • Здравствуйте,

      Похоже на ошибку с WCF, как одна из возможных причин, если время клиента и сервера отличается более чем на 10 минут, то не удастся пройти
      проверку безопасности .


      Best Regards, Andrei …
      Microsoft Certified Professional

      • Предложено в качестве ответа
        Tomas Lilov
        26 марта 2015 г. 12:30
      • Помечено в качестве ответа
        Иван ПродановMicrosoft contingent staff, Moderator
        31 марта 2015 г. 7:50
    • Remove From My Forums
    • Question

    • Hello,

      We have a wcf service hosted in IIS. We used basicHttpBinding and implemented a UserNamePasswordValidator for the custom authentication.

      However, we have issues when the WCF is consumed with a asmx client.

      An error occurred when verifying security for the message.

      (because asmx client can only work basicHttpBinding with transport security. basic authentication is disabled.)

      Here is my security config

                          <security mode="TransportWithMessageCredential">
                              <transport clientCredentialType="None" proxyCredentialType="None"
                                  realm="" />
                              <message clientCredentialType="UserName" algorithmSuite="Default" />
                          </security>

      what are the solutions? We thought of using a simple Message Header for the authentication, however we don’t want to pass the credentials in the parameters of the method call

      var s = new service.TaskService();
      s.GetSomething(credential, TaskNumber); //not nice...
      • Edited by

        Tuesday, June 4, 2013 7:58 AM

    Answers

    • Maybe the following links can help you to sort out what the problem is: http://stackoverflow.com/questions/3765212/an-error-occurred-when-verifying-security-for-the-message

      http://blogs.microsoft.co.il/blogs/urig/archive/2011/01/23/wcf-quot-an-error-occurred-when-verifying-security-for-the-message-quot-and-service-security-audit.aspx

      Like I wrote before, you should be able to use a UserNamePasswordValidator with basicHttpBinding by using the Message security mode with a certificate or the TransportWithMessageCredential security mode with SSL.

      • Edited by
        Magnus (MM8)MVP
        Tuesday, June 4, 2013 2:22 PM
      • Marked as answer by
        Haixia_Xie
        Tuesday, June 11, 2013 7:43 AM
      • Marked as answer by
        Haixia_Xie
        Tuesday, June 11, 2013 7:43 AM
    • Remove From My Forums
    • Question

    • Hello,

      We have a wcf service hosted in IIS. We used basicHttpBinding and implemented a UserNamePasswordValidator for the custom authentication.

      However, we have issues when the WCF is consumed with a asmx client.

      An error occurred when verifying security for the message.

      (because asmx client can only work basicHttpBinding with transport security. basic authentication is disabled.)

      Here is my security config

                          <security mode="TransportWithMessageCredential">
                              <transport clientCredentialType="None" proxyCredentialType="None"
                                  realm="" />
                              <message clientCredentialType="UserName" algorithmSuite="Default" />
                          </security>

      what are the solutions? We thought of using a simple Message Header for the authentication, however we don’t want to pass the credentials in the parameters of the method call

      var s = new service.TaskService();
      s.GetSomething(credential, TaskNumber); //not nice...
      • Edited by

        Tuesday, June 4, 2013 7:58 AM

    Answers

    • Maybe the following links can help you to sort out what the problem is: http://stackoverflow.com/questions/3765212/an-error-occurred-when-verifying-security-for-the-message

      http://blogs.microsoft.co.il/blogs/urig/archive/2011/01/23/wcf-quot-an-error-occurred-when-verifying-security-for-the-message-quot-and-service-security-audit.aspx

      Like I wrote before, you should be able to use a UserNamePasswordValidator with basicHttpBinding by using the Message security mode with a certificate or the TransportWithMessageCredential security mode with SSL.

      • Edited by
        Magnus (MM8)MVP
        Tuesday, June 4, 2013 2:22 PM
      • Marked as answer by
        Haixia_Xie
        Tuesday, June 11, 2013 7:43 AM
      • Marked as answer by
        Haixia_Xie
        Tuesday, June 11, 2013 7:43 AM

    Для мониторинга работоспособности ПО RusGuard Soft используется утилита RusGuard агент. Утилита устанавливается автоматически вместе с сервером RusGuard. RusGuard агент обеспечивает:

    контроль работоспособности серверных процессов (служб), соединений с сервером БД и сервером отчетов;

    оперативное оповещение пользователя о смене состояния контролируемых процессов;

    возможность изменения настроек соединения с сервером БД и сервером отчетов;

    проверку работоспособности соединения с сервером БД и сервером отчетов;

    возможность изменения настроек соединения с сервером БД и сервером отчетов;

    возможность настройки ручной или автоматической (по заданному расписанию) чистки БД (удаление событий до определенной даты).

    отображение информации о лицензиях и состоянии соответствующего ПО.

    регистрацию сервера в сервисе RusGuard Cloud.

    После установки серверной части программного комплекса RusGuard Soft, утилита запускается из меню Пуск ОС Windows и в дальнейшем всегда доступна в области уведомлений (системном трее) (см. рис. 1).

    RusGuard агент не будет отображаться в системном трее в случае смены текущего пользователя Windows на ПК.

    Запустить RusGuard агент можно вручную: Пуск > Все программы > папка RusGuard > RusGuard агент. Для автоматического запуска поместите ярлык RusGuard агент в меню Автозагрузка.

          Рисунок 1 -                  Утилита RusGuard агент  в системном трее

          Рисунок 1 —                
    Утилита RusGuard агент
    в системном трее

    Пиктограмма в системном трее может менять цвет в зависимости от текущего состояния (настроек) системы (подсистем) (см. табл. 1).

    Таблица 1 — Цветовые обозначения утилиты RusGuard агент. Общий случай (системный трей)

    Цвет пиктограммы

    Значение

    Система (подсистемы) работает нормально

    Система (одна или несколько подсистем) отключены пользователем (не запущены), но работоспособны (т.е. настройки корректны и связанные с ними компоненты функционируют нормально)

    Состояние системы (одной или нескольких подсистем) неизвестно, или подсистема не установлена

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

    Цвет пиктограммы в системном трее меняется на желтый, серый или красный при изменении состоянии хотя бы одной из подсистем. Вызвав RusGuard агент, пользователь может определить, где именно произошла смена состояния, ошибка или отключение.

    Интерфейс утилиты RusGuard агент состоит из набора вкладок, на каждой из которых отображается информация о состоянии основных подсистем программного комплекса и их отдельных компонентов. Для отображения состояния подсистем и компонентов используется та же цветовая схема, что и для оповещения пользователя в системном трее.

    Также в каждой вкладке предусмотрен набор инструментов для базовой отладки компонентов.

    Вкладка Сервисы

    На этой вкладке (см. рис. 2) отображается состояние серверных процессов и служб (см. табл. 2 и 3).

    Рисунок 2 - Утилита RusGuard агент. Вкладка Сервисы

    Рисунок 2 — Утилита RusGuard агент. Вкладка Сервисы

    Таблица 2 — Цветовые обозначения утилиты RusGuard агент. Вкладка Сервисы

    Цвет пиктограммы

    Значение

    Все сервисы работают нормально

    Один или несколько сервисов не запущены

    Сервис не установлен либо недоступен

    Ошибка при запуске одного или нескольких сервисов

    Таблица 3 — Управление работой сервисов

    Кнопка

    Значение

    Запуск всех сервисов

    Остановка всех сервисов

    Перезапуск IIS. Может потребоваться после редактирования параметров доступ к серверу БД и серверу отчетов (см. ниже), а также при различных сбоях работы АРМ

    Остановка того сервиса, напротив названия которого расположена кнопка

    Запуск того сервиса, напротив названия которого расположена кнопка

    Вкладка База данных

    На этой вкладке отображается состояние БД.

    Рисунок 3 - Утилита RusGuard агент. Вкладка База данных

    Рисунок 3 — Утилита RusGuard агент. Вкладка База данных

    На вкладке База данных отображается текущее состояние соединения с сервером БД (см. рис. 3), для уведомления пользователя об изменениях состояния используется стандартная цветовая схема утилиты (см. табл. 4).

    Таблица 4 — Цветовые обозначения утилиты RusGuard агент. Вкладка База данных

    Цвет пиктограммы

    Значение

    Соединение установлено

    Не прочитан файл конфигурации, но соединение работает

    Идет проверка соединения

    Ошибка соединения с БД

    Используя панель инструментов на вкладке (см. табл. 5), пользователь может:

    Отредактировать параметры соединения с сервером БД

    Проверить соединение с БД

    Загрузить базу данных

    Таблица 5 — Базовые настройки соединения с БД. Мониторинг БД

    Кнопка

    Значение

    Позволяет активировать поля ввода настроек соединения с сервером БД в нижней части вкладки (область Настройки соединения с базой данных) для их редактирования

    Кнопка становится активна после изменения настроек. Позволяет сохранить новые параметры соединения с БД

    Кнопка становится активна после изменения настроек соединения. Позволяет отменить новые параметры соединения с БД и вернуть прежние

    Проверка соединения с БД

    Создание новой базы данных на сервере БД. Используется в тех случаях, когда прежнюю БД потребовалось по той или иной причине удалить. Кнопка активна, когда база данных отсутствует. При этом отображается соответствующее сообщение

    Для того чтобы изменить настройки соединения с БД:

    1.Нажмите на кнопку .

    2.Введите новые параметры в  поля области Настройки соединения с базой данных (см. табл. 6).

    Таблица 6 — Поля формы для настройки соединения с БД

    Поле

    Значение и требования к заполнению

    Адрес и название инстанса сервера БД

    Адрес сервера БД, формируемый по следующему правилу (см. табл. 7):

    [Имя компьютера]\[Название экземпляра] 

    Если сервер RusGuard и сервер БД развертываются на одном компьютере, адрес примет вид:

    .\[Название экземпляра]

    Значение параметра «Название экземпляра» зависит от типа экземпляра SQL Server («Экземпляр по умолчанию», «Именованный экземпляр», выбранного при его установке.

    Логин SQL сервер

    sa  (от «super administrator»)

    Пароль SQL сервер

    Пароль, заданный при установке сервера RusGuard (если устанавливался одновременно с SQL-сервером), либо при установке SQL-сервера (если конфигурация подразумевает его самостоятельную установку).

    3.Выполните проверку соединения .

    4.Если настройки корректны, нажмите на кнопку . В противном случае отмените изменения и введите корректные данные.

    5.Перезапустите все сервисы. Для этого:

    i.Перейдите на вкладку Сервисы.

    ii.Нажмите на кнопку и дождитесь остановки всех сервисов.

    iii.Нажмите на кнопку .

    iv.Нажмите на кнопку .

    Таблица 7 — Вид адреса инстанса сервера БД. В зависимости от типа конфигурации

    Тип конфигурации

    Вид адресной строки

    Сервер RusGuard сервер БД установлены на одном компьютере

    Если установка SQL-сервера выполнялась одновременно с установкой сервера RusGuard, экземпляр SQL-сервера получит имя RUSGUARD, и адрес будет выглядеть следующим образом:

     .\RUSGUARD 

    Если SQL-сервер был установлен ранее в режиме наименования «Экземпляр по умолчанию«, то адрес сервера БД будет состоять только из точки (.)

    Если SQL-сервер был установлен раньше в режиме наименования «Именованный экземпляр» с именем SQLExpress (возможно и другое), то адрес сервера БД примет вид:

    .\SQLExpress 

    Сервер RusGuard сервер БД установлены на разных компьютерах

    Если при установке SQL-сервера выбран режим наименования «Именованный экземпляр» с именем SQLExpress (возможно и другое, например, MyServer), то адрес примет вид:

    [hostname]\SQLExpress

    Один из распространенных сбоев базы данных связан с остановкой SQL-сервера. Для устранения сбоя необходимо перезапустить SQL-сервер, используя SQL Server Configuration Manager (см. рис. 4).

    Рисунок 4 - Перезапуск экземпляра SQL-сервера

    Рисунок 4 — Перезапуск экземпляра SQL-сервера

    Вкладка Сервер отчетов

    На этой вкладке (см. рис. 5) выполняется настройка соединения с сервером отчетов.

    Рисунок 5 - Утилита RusGuard агент. Вкладка Сервер отчетов

    Рисунок 5 — Утилита RusGuard агент. Вкладка Сервер отчетов

    На вкладке отображается текущее состояние соединения с сервером отчетов, для уведомления пользователя об изменениях состояния используется стандартная цветовая схема утилиты (см. табл. 8).

    Таблица 8 — Цветовые обозначения утилиты RusGuard агент. Вкладка База данных

    Цвет пиктограммы

    Значение

    Соединение установлено

    Не прочитан файл конфигурации, но соединение работает

    Идет проверка соединения

    Ошибка соединения с сервером отчетов

    Используя панель инструментов на вкладке (см. табл. 9), пользователь может:

    редактировать параметры соединения с сервером отчетов;

    проверять состояние соединения;

    загружать отчеты на сервер.

    Таблица 9  Базовые настройки соединения с сервером отчетов

    Кнопка

    Значение

    Позволяет активировать поля ввода настроек соединения с сервером БД в нижней части вкладки (область Настройки соединения с сервером отчетов) для их редактирования

    Кнопка становится активна после изменения настроек. Позволяет сохранить новые параметры соединения с сервером отчетов

    Кнопка становится активна после изменения настроек соединения. Позволяет отменить новые параметры соединения с сервером отчетов и вернуть прежние

    Проверка соединения с сервером отчетов

    Создание чистой базы данных на сервере отчетов

    Создание источника данных на сервере

    Для того чтобы изменить настройки соединения с сервером отчетов:

    1.Нажмите на кнопку .

    2.Введите новые параметры в  поля области Настройки соединения с сервером отчетов. Используйте учетные данные, введенные при установке сервера RusGuard (или SQL-сервера, если он был установлен отдельно) (см. табл. 10).

    Таблица 10  — Формат ввода адреса сервера отчетов

    Поле

    Формат заполнения

    Cервер отчетов

    http://Имя сервера отчетов/ReportServer_Имя инстанса_SQL-сервера

    Примеры:

    http://ServerSQL /ReportServer_SqlExpress – подключение серверу отчетов (ServerSQL) с именем инстанса SqlExpress

    http://ServerSQL/ReportServer – подключение к серверу отчетов (ServerSQL) с пустым именем инстанса

    Предупреждение: Недопустимо использование в строке подключения адресов типа 127.0.0.1 и localhost.

    3.Выполните проверку соединения .

    4.Если настройки корректны, нажмите на кнопку . В противном случае отмените изменения и введите корректные данные.

    5.Перезапустите все сервисы. Для этого:

    I.Перейдите на вкладку Сервисы.

    II.Нажмите на кнопку и дождитесь остановки всех сервисов.

    III.Нажмите на кнопку .

    IV.Нажмите на кнопку .

    Вкладка Управление событиями

    На вкладке Управление событиями (см. рис. 6) пользователь может:

    Вручную удалить события до выбранной даты (включительно);

    Настроить автоматическое удаление событий.

    Рисунок 6 - Утилита RusGuard агент. Вкладка Управление событиями

    Рисунок 6 — Утилита RusGuard агент. Вкладка Управление событиями

    Для того чтобы удалить события вручную:

    1.Нажмите на кнопку .

    Активируются все поля ввода дат на вкладке.

    2.В поле Удалить события до дд.мм.гггг включительно области Ручное удаление событий введите дату.

    Дата вводится при помощи календаря, который всплывает при щелчке мышью внутри поля.

    После ввода даты активируется кнопка Удалить события.

    3.Нажмите на кнопку Удалить события.

    Система начинает процесс удаления. Ход процесса отображается во всплывающем окне.

    Для того чтобы настроить автоматическое удаление:

    1.Нажмите на кнопку .

    Активируются все поля ввода на вкладке.

    2.Введите период хранения событий в поле Хранить события за _х_  месяцев области Автоматическое удаление событий.

    3.В поле Запускать удаление _чч:мм_ в выберите частоту и время очистки базы данных событий (см. рис. 7).

    Рисунок 7 - Утилита RusGuard агент. Вкладка Управление событиями. Настройка автоматического удаления

    Рисунок 7 — Утилита RusGuard агент. Вкладка Управление событиями. Настройка автоматического удаления

    После ввода даты активируется кнопка . Также активируется кнопка , которая позволяет сбросить введенные данные.

    4.Нажмите на кнопку .

    Система применит настройки.

    Вкладка Лицензии

    Рисунок 8 - Утилита RusGuard агент. Вкладка Лицензии

    Рисунок 8 — Утилита RusGuard агент. Вкладка Лицензии

    На вкладке Лицензии (см. рис. 8) отображается список подключенных лицензий и состояние связанного с ними ПО (например, драйверов).

    Произошла ошибка при проверке безопасности сообщения

    когда я пытаюсь вызвать службу WCF я получаю следующее сообщение «произошла ошибка при проверке безопасности сообщения.»

    когда я удаляю пользовательскую аутентификацию, служба работает без проблем. Я не могу понять, что я неправильно сконфигурировал в своей сети.конфиг. Любое понимание будет оценено.

      <system.serviceModel>
         <services>
            <service behaviorConfiguration="NAThriveExtensions.nableAPIBehavior"
              name="NAThriveExtensions.nableAPI">
               <endpoint 
                 address="" 
                 binding="basicHttpBinding" 
                 bindingConfiguration="basicHttpBinding_Secure"
                 contract="NAThriveExtensions.InableAPI">
               </endpoint>
               <endpoint 
                 address="mex" 
                 binding="mexHttpsBinding" 
                 contract="IMetadataExchange" />
            </service>
         </services>
         <behaviors>
            <serviceBehaviors>
              <behavior name="NAThriveExtensions.nableAPIBehavior">
                <serviceMetadata httpsGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="false" />
                <serviceCredentials>
                  <userNameAuthentication 
                    userNamePasswordValidationMode="Custom" 
                  customUserNamePasswordValidatorType= "NAThriveExtensions.Authentication, NAThriveExtensions" />
                </serviceCredentials>
              </behavior>
            </serviceBehaviors>
         </behaviors>
         <bindings>
           <basicHttpBinding>
             <binding name="basicHttpBinding_Secure">
               <security mode="TransportWithMessageCredential">
                 <message clientCredentialType="UserName"/>
               </security>
             </binding>
           </basicHttpBinding>
         </bindings>
      </system.serviceModel>
    

    7 ответов


    Я получал это же сообщение об ошибке, и оказалось, что это связано с разницей во времени между моей рабочей станцией и сервером, на котором размещена служба WCF. Сервер был около 10 минут позади моей машины, и WCF security, похоже, не очень нравится.

    чтобы найти корневую проблему, я включил serviceSecurityAuditing в конфигурационном файле сервера. Добавьте в конфигурацию/систему следующее.serviceModel / поведение / serviceBehaviors / раздел поведение для вашего обслуживания:

    <serviceSecurityAudit 
        auditLogLocation="Application" 
        serviceAuthorizationAuditLevel="Failure" 
        messageAuthenticationAuditLevel="Failure" 
        suppressAuditFailure="true"/>
    

    следующий сайт был полезен в выяснении этого:

    http://blogs.microsoft.co.il/blogs/urig/archive/2011/01/23/wcf-quot-an-error-occurred-when-verifying-security-for-the-message-quot-and-service-security-audit.aspx


    другая причина это сообщение, когда некоторые из ваших машин не синхронизированы во времени. WCF по умолчанию допускает пятиминутный разрыв; кроме того, он выдает ошибку, если что-то не синхронизировано.

    раствор для синхронизации всех ваших машин. time.windows.com славится тем, что не работает, поэтому я предлагаю использовать что-то другое. (Если вы находитесь в корпоративной среде, локальный контроллер домена может быть правильный выбор.)


    Это оказалось проблемой на стороне потребления, а не с самой службой. Webmethods 8 программного обеспечения AG потреблял этот сервер, но не было никакого обработчика безопасности, добавленного к службе, поэтому учетные данные не были добавлены в заголовок, что привело к вышеупомянутой ошибке.


    Я получаю ту же ошибку на моем сервере IIS 7.5. Я забыл добавить разрешение на чтение на закрытый ключ сертификата в виртуальный аккаунт пула приложений (например, IIS AppPool\ASP.NET v4.0).

    для информации, тестируя различные комбинации учетных записей и разрешений, я заметил, что пул приложений необходимо переработать, чтобы потерять доступ к ключу, как только он был извлечен один раз.

    (0x80131501-произошла ошибка при проверке безопасности сообщение.)


    Я получал ту же ошибку, и ни одна из вышеперечисленных помощь для меня.

    Я, наконец, отследил его до connectionStrings в родительской сети.config (моя служба была развернута в дочернем приложении на сайте администратора).

    Да, звучит смешно, но как только я завернул строки подключения в родительской сети.config с элементом location все начали работать.

    для ясности, в родительской сети.config я изменил это

    <connectionStrings>
        <add name="..." />
    </connectionStrings>
    

    в это

    <location path="." inheritInChildApplications="false">
        <connectionStrings>
            <add name="..." />
        </connectionStrings>
    </location>
    

    обратите внимание, что эта ошибка также привела к этому очень бесполезному serviceSecurityAudit сообщение:

    ошибка проверки подлинности сообщения.
    Услуга. :..
    Действие:http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT
    ClientIdentity:
    Значение activityid:
    ArgumentNullException: значение не может быть null.
    Имя параметра: менеджер


    Я получал ту же ошибку. Я забыл добавить разрешение на чтение в базу данных членства aspnetdb в (IIS APPPOOL\DefaultAppPool).

    ошибка проверки подлинности сообщения. Услуга.:…

    действие:http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT

    ClientIdentity:

    значение activityid:

    SqlException: не удается открыть базу данных «aspnetdb», запрошенную логином. Ошибка входа в систему.

    ошибка входа в систему для IIS пользователя
    \Пула средством’.


    имя пользователя и пароль сервер подключения,а не ваши
    имя пользователя и пароль для входа в систему.


    Понравилась статья? Поделить с друзьями:
  • Руны осознание ошибок
  • Румынская тяга ошибки
  • Румба ошибка 6 как исправить
  • Румба ошибка 5 правый
  • Румба ошибка 5 айробот на зарядке