2015-10-23 53 views
1

我有一個WCF服務和桌面客戶端。我使用net.tcp綁定。我有我自己的身份驗證方法,但我希望消息被加密。所以我在雙方安裝了相同的證書。我的配置如下:WCF net.tcp綁定與基於證書的郵件安全性,但安全模式關閉

<endpointBehaviors> 
    <behavior name="CustomBehavior"> 
     <clientCredentials> 
     <clientCertificate storeLocation="CurrentUser" storeName="Root" findValue="myCertificateIssuer" x509FindType="FindByIssuerName" /> 
     </clientCredentials> 
    </behavior> 
</endpointBehaviors> 

...

<binding name="simpleTCP" closeTimeout="00:10:00" openTimeout="00:10:00" 
    sendTimeout="00:10:00" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" > 
    <security mode="None"> 
    <message clientCredentialType="Certificate"/> 
    </security> 
</binding> 

我對服務器相同的配置也是如此。該解決方案正在工作,但我不知道它是否真的加密消息。我是否認爲,這種配置會關閉默認身份驗證,但仍會加密通道?

在此先感謝

回答

1

制定初始響應

如果要加密通道,使用結合像這樣的傳輸層加密:

<bindings> 
    <netTcpBinding> 
    <binding name="TestTcp"> 
     <security mode="Transport"> <!-- Channel --> 
     <transport clientCredentialType="Certificate" protectionLevel="EncryptAndSign" /> 
     </security> 
    </binding> 
    </netTcpBinding> 
</bindings> 

要加密消息,使用綁定像這樣的消息級加密:

<bindings> 
    <netTcpBinding> 
    <binding name="TestTcp"> 
     <security mode="Message"> <!-- Message --> 
     <message clientCredentialType="Certificate" algorithmSuite="Default" /> 
     </security> 
    </binding> 
    </netTcpBinding> 
</bindings> 

你會發現下面<security/>節點可以<message/><transport/>,所選mode應該相匹配。 clientCredentialType設置爲Certificate使用您的服務證書來執行加密。

「[要加密頻道】與NetTcpBinding的,使用Windows身份驗證時,綁定使用該服務的Windows標記來提供消息保護,當使用非Windows身份驗證,如證書認證,您必須配置服務證書作爲服務憑證,綁定使用服務證書進行消息保護。「

「使用Windows身份驗證時[加密郵件],郵件安全性使用服務的Windows令牌提供郵件安全性。使用非Windows身份驗證(如用戶名,證書或問題身份驗證)時,必須配置服務證書作爲服務憑證,消息安全性使用服務證書進行消息保護。「

https://msdn.microsoft.com/en-us/library/ff648863.aspxhttps://msdn.microsoft.com/en-us/library/ff648863.aspx

希望覆蓋所有的基地,讓你與X.509證書加密郵件或通道。

+0

PS你可能想自己證明一下。嘗試使用消息分析器:https://www.microsoft.com/en-us/download/details.aspx?id = 44226 –

+0

因此,您是說無法關閉身份驗證,但仍然可以加密通信通道?我不需要也不想配置身份驗證,但我希望使用指定的證書對通道進行加密。那可能嗎? –

+0

恰恰相反,您可以啓用和禁用WCF中的所有內容。 WCF在默認情況下是「安全的」,這在大多數情況下意味着您不必做任何事情就可以獲得安全的消息。剛注意到我誤解了你想加密OP中的消息而不是頻道,所以我正在更新我的答案以顯示兩者。 –