2011-08-03 50 views
0

簡而言之,就是這種情況。我有一個使用表單身份驗證和自定義成員資格提供程序的ASP.NET應用我已經使用ServiceHostFactory創建了一個WCF客戶端和一個ASP.NET ServiceHost。到目前爲止,一切都很完美,但爲了在真實世界中部署這一切,我需要保證它的安全。我似乎無法找到如何設置該服務的證書。我想使用已經與託管我的服務的ASP.NET應用程序相關聯的證書。帶ASP.NET的WCF證書配置

如何設置證書的方式將自動將證書設置爲託管Web應用程序的證書,而無需手動識別證書。如果用戶必須安裝WCF程序集並對配置文件進行更改並且必須知道有關安裝的證書的信息,那麼這將是一個真正的PITA。

以下是我迄今爲止編制的內容,但尚未能使其發揮作用,並且在安裝過程中無法重新編譯而無法配置。

serviceHost.Credentials.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindByIssuerDistinguishedName, "mycertificate"); 

是否有一個ASP.NET Api會返回與託管應用程序關聯的證書,我可以傳遞給SetCertificate?另外,如何處理沒有安裝證書的情況,但我仍然希望WCF連接,儘管不安全?

回答

1

這取決於您是否要使用傳輸或消息級別的安全性。如果你只是想你的web服務,以https使用過像任何其他網頁,然後在您的WCF的配置,你不需要指定證書,您只需啓用傳輸安全性,如:

<basicHttpBinding> 
    <binding name="basicHttpsSecured" sendTimeout="00:02:00"> 
     <security mode="Transport"> 
     <transport clientCredentialType="None" /> 
     </security> 
    </binding> 
    </basicHttpBinding> 

然後在IIS ,您可以像在任何其他ASP.NET網站上那樣在網站上設置SSL證書。如果您沒有通過IIS託管,而是將其作爲自託管的Windows服務或其他東西,那麼您將不得不在您的配置中設置證書,但是在IIS中託管時,您可以讓IIS執行此操作。

相反,如果你想要做的消息級安全性,這意味着要運輸在非安全常規的HTTP,但你的郵件內容是加密的,那麼你就設置

<security mode="Message"> 

上的約束力,以及指定用於加密消息的證書。不過,這聽起來像你正在談論使用SSL/HTTPS爲您的Web服務。

+0

您是否認爲使用傳統SSL/HTTPS傳輸財務數據是最佳做法?如果我使用郵件安全,我需要提供證書嗎?如果是這樣,我可以將我的證書保存在我的.svc文件所在的位置嗎?如果是這樣,我如何告訴WCF它在哪裏?我想盡可能簡化部署。 –

+0

對於敏感的金融和/或信用卡數據,您可能希望同時使用傳輸和消息安全性。但是要做消息安全性,客戶端需要證書。對於我過去處理過的一些信用卡處理公司,他們會爲每個客戶發放一個獨特的證書,因此沒有2個Web服務用戶使用相同的證書,因此不能解密其他每個消息。 – CodingWithSpike

+0

此外,這個MSDN文章可能會有所幫助,它有一個分步設置證書認證的方法:http://msdn.microsoft.com/en-us/library/ff648360.aspx – CodingWithSpike