默認情況下,NetTcpBinding會生成一個運行時通信堆棧,該堆棧使用傳輸安全。
NetTcpBinding類共有四個構造函數,分別如下:
q NetTcpBinding()。初始化NetTcpBinding類的新實例。
q NetTcpBinding(SecurityMode)。用所使用的指定安全類型初始化NetTcpBinding類的新實例。
q NetTcpBinding(String)。使用指定配置名稱初始化NetTcpBinding類的新實例。
q NetTcpBinding(SecurityMode, Boolean)。用所使用的指定安全類型和一個指示是否顯式啟用安全會話的值來初始化NetTcpBinding類的新實例。
NetTcpBinding類有一個類型為NetTcpSecurity的屬性,名為Security。NetTcpSecurity指定用NetTcpBinding配置的終結點所使用的傳輸級安全性和消息級安全性的類型。代碼清單11-8是NetTcpSecurity的定義(部分成員)。
代碼清單11-8 NetTcpSecurity定義
public sealed class NetTcpSecurity { // Fields internal const SecurityMode DefaultMode = SecurityMode.Transport; // Methods public NetTcpSecurity(); public MessageSecurityOverTcp Message {get; set; } public SecurityMode Mode { get; set; } public TcpTransportSecurity Transport { get; set; } }
從以上代碼可以知道,NetTcpSecurity為NetTcpBinding設置安全模式,並根據安全模式指定傳輸和消息安全細節。同時,可以看到默認情況下,NetTcpSecurity為NetTcpBinding設置的傳輸安全類型為Transport。若安全類型為Transport,那麼需要設置TcpTransportSecurity屬性的值,TcpTransportSecurity的定義如代碼清單11-9所示。
代碼清單11-9 TcpTransportSecurity定義(部分代碼)
public sealed class TcpTransportSecurity { internal const TcpClientCredentialType DefaultClientCredentialType = TcpClientCredentialType.Windows; internal const ProtectionLevel DefaultProtectionLevel = ProtectionLevel.EncryptAndSign; [DefaultValue(1)] public TcpClientCredentialType ClientCredentialType { get; set; } public ExtendedProtectionPolicy ExtendedProtectionPolicy { get; set; } [DefaultValue(2)] public ProtectionLevelProtectionLevel { get; set; } }
以上代碼公開了TcpTransportSecurity的三個屬性,其中ClientCredentialType屬性用來獲取或設置用於身份驗證的客戶端憑據類型;ExtendedProtectionPolicy屬性用來獲取或設置 TCP 傳輸的擴展保護策略;ProtectionLevel用來設置保護級別。在默認情況下,客戶端憑據類型設置為Windows,保護級別為EncryptAndSign。
下面的系列博文通過實例來探究NetTcpBinding下的安全配置。
---------------------------------------注:本文部分內容改編自《.NET 安全揭秘》
作者:玄魂
出處:http://www.cnblogs.com/xuanhun/
查看本欄目