Требуется помощь для защиты моей службы WCF с использованием сертификата - PullRequest
0 голосов
/ 18 августа 2010

Привет всем,

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

Ошибка сервера в «/ MyTestService» Применение.

Набор ключей не существует

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

Сведения об исключении: System.Security.Cryptography.CryptographicException: Keyset не существовать................................................. ..............

............................................... .....................

Кажется, проблема с сертификатом. Может кто-нибудь объяснить, как обращаться с материалами сертификата и, пожалуйста, подробно. Просто подумайте, что я новичок в сертификатах.

<system.serviceModel>
    <services>
        <service name="Test.MyService" behaviorConfiguration="MyServiceBehavior">
            <!--         Service Endpoints -->
            <endpoint address="MyTestService" binding="wsHttpBinding" bindingConfiguration="WebserviceHttpBinding" contract="Test.IMyService"/>
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
        </service>
    </services>
    <bindings>
        <wsHttpBinding>
            <binding name="WebserviceHttpBinding">
                <security mode="Message">
                    <message clientCredentialType="UserName" negotiateServiceCredential="false"/>
                </security>
            </binding>
        </wsHttpBinding>
    </bindings>
    <behaviors>
        <serviceBehaviors>
            <behavior name="MyServiceBehavior">
                <serviceCredentials>
                    <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="Test.CredentialValidator, Test"/>
                    <serviceCertificate findValue="RPKey" x509FindType="FindBySubjectName" storeLocation="LocalMachine" storeName="My"/>
                </serviceCredentials>
                <!--           To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
                <serviceMetadata httpGetEnabled="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"/>
            </behavior>
        </serviceBehaviors>
    </behaviors>
</system.serviceModel>

1 Ответ

2 голосов
/ 18 августа 2010

Вы установили разрешение на доступ к секретному ключу сертификата? Закрытые ключи по умолчанию защищены, поэтому только администратор может получить к ним доступ. Вы должны установить разрешение на чтение для учетной записи, на которой запущен AppPool вашего сервиса.

Редактировать: Чтобы установить разрешения, откройте MMC и добавьте оснастку для локального компьютера. Перейдите к Личному> Сертификаты> RPKey и из контекстного меню выберите Все задачи> Управление закрытыми ключами.

...