2013-02-13 35 views
7

Bu dikişler ortak bir sorun olmaktan çıkmıştı ve ben burada tüm cevaplara baktım ama hiçbiri yardımcı olmadı.HTTP isteği, istemci kimlik doğrulama şeması 'Anonim' ile yasaklandı 'Anonim'

SSL, iis üzerinde barındırılan basichttpbinding ve WCF hizmeti ile çalışmak için çalışıyorum. Sorun iis ya da sertifikalarda olduğunu düşünüyorum. Iis yöneticisinde kendinden imzalı bir sertifika oluşturdum. Sertifikama "bilgisayarım" denir ve ayrıca Güvenilir Kök Sertifikasyonuna da yerleştirilmiştir. İstemcinin sertifikayı bulmakta herhangi bir sorunu yoktur.

iis'teki ayarlarım anonim olarak etkinleştirmek ve diğer her şeyi devre dışı bırakmak içindir. Ayrıca SSL gerektirir ve istemci sertifikası kabul edilir. Bu doğru mu? Görmezden gelmeyi seçersem hata olurum.

Yapılarımda yanlış bir şey göremiyorum, bunlar doğru mu?

Servis yapılandırma:

<system.serviceModel> 
<services> 
    <service behaviorConfiguration="MyBehaviour" name="BasicHttpSecTest.Service1"> 
    <endpoint name="MyEndPoint" address="https://mycomputer/wp/" binding="basicHttpBinding" bindingConfiguration="ClientCertificateTransportSecurity" contract="BasicHttpSecTest.IService1" /> 
    <!--<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />--> 
    </service> 
</services> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="MyBehaviour"> 
     <serviceMetadata httpsGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
     <serviceCredentials> 
     <clientCertificate> 
      <authentication certificateValidationMode="PeerOrChainTrust" revocationMode="NoCheck"/> 
     </clientCertificate> 
     </serviceCredentials> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<bindings> 
    <basicHttpBinding> 
    <binding name="ClientCertificateTransportSecurity"> 
     <security mode="Transport"> 
     <transport clientCredentialType="Certificate" /> 
     </security> 
    </binding> 
    </basicHttpBinding> 
</bindings> 
</system.serviceModel> 

Müşteri Yapılandırma:

<system.serviceModel> 
<client> 
    <endpoint address="https://mycomputer/wp/Service1.svc" binding="basicHttpBinding" 
     bindingConfiguration="MyEndPoint" contract="ServiceSSLref.IService1" 
     name="MyEndPoint1" behaviorConfiguration="ClientCertificateCredential"/> 
</client> 

<bindings> 
    <basicHttpBinding> 
     <binding name="MyEndPoint"> 
      <security mode="Transport"> 
       <transport clientCredentialType="Certificate" /> 
      </security> 
     </binding> 
    </basicHttpBinding> 
</bindings> 

<behaviors> 
    <endpointBehaviors> 
    <behavior name="ClientCertificateCredential"> 
     <clientCredentials> 
     <clientCertificate findValue="mycomputer" storeLocation="LocalMachine" storeName="My" x509FindType="FindByIssuerName" /> 
     <serviceCertificate> 
      <authentication certificateValidationMode="PeerOrChainTrust" revocationMode="NoCheck"/> 
     </serviceCertificate> 
     </clientCredentials> 
    </behavior> 
    </endpointBehaviors> 
</behaviors> 
</system.serviceModel> 

cevap

6

Ben senin sorunun istemci sertifikasında olabileceğini varsayalım. WCF'ye söylediğiniz clientCredentialType = "Sertifika" 'yı ayarlama, bu istemcinin sunucu tarafından güvenilen bir sertifika belirtmesi gerekir. Anladığım kadarıyla, sadece sunucu tarafında üretilmiş sertifikanız var.

Bu, sunucu tarafından güvenilen sertifika gerektirmeden ileti göndermenize olanak sağlar. Ya da istemci tarafında sertifika oluşturmayı ve sunucunuzda Güvenilir klasöre yerleştirmeyi deneyebilirsiniz. Belki bu durum size yardımcı olacaktır http://msdn.microsoft.com/en-us/library/ms731074.aspx

+1

Teşekkürler, bu hata için bir çözüm olabilirdi. Ancak, "Uzak sunucu beklenmeyen bir yanıt verdi: (405) Yöntem İzin Verilmedi." Aynı aşamada, daha iyi veya daha kötü olduğundan emin değilim. – Zeezer

+0

Sözleşme arayüzünüzde genel anahtar kelimeniz olup olmadığını kontrol edin. Ve unutmayın: C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319> ServiceModelReg.exe -i – Alex

+1

Çok teşekkürler! Bu problemle günlerce oturuyordum. Şimdi çalışma ve son sorun kolay bir düzeltmekti. Adresim https: //mycomputer/wp/Service1.svc ve https: // mycomputer/wp/olmalıdır. – Zeezer