2011-06-28 96 views
0

我一直在嘗試在IIS6上使用SSL設置WCF傳輸安全性。通過SSL爲IIS6配置WCF傳輸安全性

客戶端位於同一個域上的單獨計算機上。

我瞭解證書,根CA等的前提,並且擁有一組可用於消息安全的證書,並且可以在相同環境中使用這些證書。 (我在過去一週學到了很多東西:)

我有一個噩夢試圖讓我的客戶端在我切換到SSL時對IIS 6服務進行身份驗證。通話時始終收到「不允許的匿名身份驗證」。

在IIS中我有

  • 根簽署CA證書的網站SSL端口443 (上設置的,如果我瀏覽https://開頭SVC頁面,我可以看到IE掛鎖和頁面說你需要一個證書到通信)
下安全通信

我有

  • 需要SSL通道
  • 要求128位加密
  • 需要客戶端證書
  • 啓用客戶端證書映射(具有許多設置爲1名映射到管理員帳戶上的IIS框現在證書主題O域匹配的)

下網站安全(身份認證和訪問控制)

  • 匿名訪問= ON
  • Intergrated Windows身份驗證= OFF
  • 基本身份驗證= ON

對於客戶端的wsHttpBinding我已經準備好身份驗證的證書和一個自定義端點行爲提供這種信息,但我不認爲它得到這個地步!

更新的服務器CONFIG

<system.serviceModel> 
    <bindings> 
     <wsHttpBinding> 
      <binding name="CertificateWithTransport"> 
       <security mode="Transport"> 
        <transport clientCredentialType="Certificate"/> 
       </security> 
      </binding> 
     </wsHttpBinding> 
    </bindings> 
    <services> 
     <service name="WCFServiceCertificate.Service1" behaviorConfiguration="credentialConfig">     
      <endpoint address="https://svnvmig02/Service1.svc" 
         binding="wsHttpBinding" 
         bindingConfiguration="CertificateWithTransport" 
         contract="WCFServiceCertificate.IService1"> 
      </endpoint> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior name="credentialConfig">     
       <serviceMetadata httpsGetEnabled="true" httpGetEnabled="false"/>      
       <serviceDebug includeExceptionDetailInFaults="false"/> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
</system.serviceModel> 

更新的客戶端CONFIG

<system.serviceModel> 
    <bindings> 
     <wsHttpBinding> 
      <binding name="WSHttpBinding_IService1"> 
       <security mode="Transport"> 
        <transport clientCredentialType="Certificate" /> 
       </security> 
      </binding> 
     </wsHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="https://svnvmig02/Service1.svc" binding="wsHttpBinding" behaviorConfiguration="CustomBehavior" 
      bindingConfiguration="WSHttpBinding_IService1" contract="ServiceReference1.IService1" 
      name="WSHttpBinding_IService1"> 
     </endpoint> 
    </client> 
    <behaviors> 
     <endpointBehaviors> 
      <behavior name="CustomBehavior"> 
       <clientCredentials> 
        <clientCertificate findValue="svnvmig02" x509FindType="FindBySubjectName" storeLocation="LocalMachine" storeName="My"/> 
        <serviceCertificate> 
         <authentication certificateValidationMode="PeerTrust"/> 
        </serviceCertificate> 
       </clientCredentials> 
      </behavior> 
     </endpointBehaviors> 
    </behaviors> 
</system.serviceModel> 

編輯: 也許值得一提的是我的VS項目是3.5,但IIS6運行.NET4

使用修改後的配置文件(感謝Fabio;)我現在可以從客戶機瀏覽地址https://svnvmig01/Service1.svc並查看生成的svc頁面,該頁面允許我單擊也可用的wsdl URl。

我在網上找到的大多數網頁都是指自我託管或IIS7 ....我希望IIS7支持比較好;)

任何幫助,將不勝感激:)

+0

IIS的聲音配置正確。你可以發佈你的服務和客戶端配置嗎? – Fabio

+0

嗨法比奧,我想我可能已經退後一步了...... IIS配置保持不變,但是我在那裏修補我得到了...... 此服務的安全設置需要「匿名」身份驗證,但未啓用用於承載此服務的IIS應用程序 – Barbloke6

+1

此文章是否有用? http://msdn.microsoft.com/en-us/library/ms731074.aspx。你能減少你的配置到類似於文章中描述的那個嗎? – Fabio

回答

1

你的配置包括:

https://svnvmig02:8091/Service1.svc 

正常的SSL端口是443

它可能是請求沒有去你期望它去的網站。因此,您正在收到意外的錯誤消息。

檢查IIS日誌以確定哪個站點正在接收請求。

+0

嗨西拉,我已經試過修改此相同的URL作爲我在IE上衝浪看到證書掛鎖等 即。 https://svnvmig02/Service1.svc 沒有變化,但感謝您的建議 – Barbloke6

1

我覺得這裏的問題可能是你的IIS設置爲:

匿名訪問= OFF

我用我的幾個服務器的傳輸安全,所有的IIS6的人有設置ON,而不是OFF。這也相當於給你提供的錯誤信息:

「annonymous authetication不允許」

沒有匿名訪問功能,IIS要麼需要用戶輸入用戶名/密碼,或沿通窗口/活動目錄/ Kerberos憑證。

+0

歡呼rally25rs,這擺脫了'服務需要匿名認證'至少現在我回到'頁面需要客戶端證書「 – Barbloke6