2010-05-03 2 views
0

Я пытаюсь разместить службу WCF с помощью wsHttpBinding. Я создал сертификат с использованием makecert и поместил некоторые строки в web.config.помогите настроить wsHttpBinding служба WCF на .net

Это ошибка, что я получаю:

System.ArgumentException: The certificate 'CN=WCfServer' must have a private key that is capable of key exchange. The process must have access rights for the private key. 

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

Я также перешел к настройкам безопасности в свойствах файла сертификата и дал полный контроль над NETWORK SERVICE и моим именем пользователя. Опять бесполезно.

Можете ли вы посоветовать мне, в чем проблема и что именно мне нужно делать? Я действительно шелушась с этими сертификатами.

Вот мой web.config:

<system.serviceModel> 

<services> 
     <service name="Abc.Service" behaviorConfiguration="Abc.ServiceBehavior"> 
      <endpoint address="" binding="wsHttpBinding" bindingConfiguration="Abc.BindConfig" contract="Abc.IService"> 
       <identity> 
        <dns value="localhost"/> 
       </identity> 
      </endpoint> 
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
     </service> 
    </services> 

<behaviors> 
    <serviceBehaviors> 
     <behavior name="Abc.ServiceBehavior"> 
      <serviceMetadata httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 

      <serviceCredentials> 
       <clientCertificate> 
        <authentication certificateValidationMode="PeerTrust"/> 
       </clientCertificate> 
       <serviceCertificate findValue="WCfServer" storeLocation="CurrentUser" storeName="My" x509FindType="FindBySubjectName" /> 
      </serviceCredentials> 

     </behavior> 
    </serviceBehaviors> 
</behaviors> 

<bindings> 
    <wsHttpBinding> 
    <binding name="Abc.BindConfig"> 
     <security mode="Message"> 
     <message clientCredentialType="Certificate" /> 
     </security> 
    </binding> 
    </wsHttpBinding> 
</bindings> 

</system.serviceModel> 

ответ

2

Хорошо .. Я понял, в чем проблема. При использовании makecert для создания сертификата необходимо использовать параметр -pe, который делает сгенерированный закрытый экспорт таким, чтобы он мог использоваться в сертификате. Проблема заключалась в том, что makecert в комплекте с vs2008 - это версия 5.131, у которой нет опции -pe. Я нашел версию 6.0 в microsoft sdk 6, у которой есть опция.

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

3

Из того, что я мог собрать из Интернета, что кажется, что это не проблема разрешений больше как-то не так с конфигурацией сертификата.

Here есть инструкции, как разрешить доступ к закрытому ключу.

У вас установлен и запущен IIS7. Существует very simple tool там для создания сертификатов (вместо makecert), которые я успешно использовал для связи WCF.

Смежные вопросы