gpt4 book ai didi

WCF NetTcpBinding 安全性

转载 作者:行者123 更新时间:2023-12-04 16:57:03 26 4
gpt4 key购买 nike

我有一个 WCF 服务,它使用具有消息安全性和用户名身份验证的 NetTcpBinding。在此之前,我使用 WsHttpBinding 但我切换到 NetTcp,因为我可以使用回调。

我的服务配置如下所示:

<service behaviorConfiguration="WcfServiceLibrary1.ServiceBehavior" name="WcfServiceLibrary1.Service">

<endpoint
address="net.tcp://localhost:9000/Design_Time_Addresses/WcfServiceLibrary1/Service/"
binding="netTcpBinding"
bindingConfiguration="NetTCPbinding"
contract="WcfServiceLibrary1.IService"
name="NetTCPBinding">
</endpoint>
<host>
<baseAddresses>
<add baseAddress="http://localhost:8732/Design_Time_Addresses/WcfServiceLibrary1/Service/" />
</baseAddresses>
</host>
</service>
</services>
<bindings>
<netTcpBinding>
<binding name="NetTCPbinding">
<security mode="Message">
<message clientCredentialType="UserName"/>
</security>
</binding>
</netTcpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="WcfServiceLibrary1.ServiceBehavior">
<serviceCredentials>
<serviceCertificate findValue="ServerCert"
storeLocation="CurrentUser"
storeName="TrustedPeople"
x509FindType="FindBySubjectName" />
<userNameAuthentication
userNamePasswordValidationMode="MembershipProvider"
membershipProviderName="CustomMembershipProvider" />
</serviceCredentials>
<!-- To avoid disclosing metadata information,
set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="True" />
<!-- To receive exception details in faults for debugging purposes,
set the value below to true. Set to false before deployment
to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceAuthorization principalPermissionMode="UseAspNetRoles" roleProviderName="MyRoleProvider" />
<!-- Logs when an authentication failure -->
<serviceSecurityAudit auditLogLocation="Application"
suppressAuditFailure="true"
serviceAuthorizationAuditLevel="Failure"
messageAuthenticationAuditLevel="SuccessOrFailure" />
</behavior>
</serviceBehaviors>
</behaviors>

我假设使用了服务凭据 - 在这种情况下是证书 - 以便服务可以签署它发送给客户端的所有数据,因此客户端可以知道它正在与正确的服务进行通信。

客户端配置如下:
<behaviors>
<endpointBehaviors>
<behavior name="messageSecurityBehavior">
<clientCredentials>
<clientCertificate storeLocation="CurrentUser"
storeName="TrustedPeople"
x509FindType="FindBySubjectName"
findValue="ClientCert" />
<serviceCertificate>
<authentication certificateValidationMode="None" />
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
<bindings>
<netTcpBinding>
<binding name="NetTCPBinding" closeTimeout="00:01:00" openTimeout="00:01:00"
receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false"
transferMode="Buffered" transactionProtocol="OleTransactions"
hostNameComparisonMode="StrongWildcard" listenBacklog="10"
maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10"
maxReceivedMessageSize="65536">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="Message">
<transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
<message clientCredentialType="UserName" />
</security>
</binding>
</netTcpBinding>

</bindings>
<client>
<endpoint address="net.tcp://localhost:9000/Design_Time_Addresses/WcfServiceLibrary1/Service/"
binding="netTcpBinding" bindingConfiguration="NetTCPBinding"
contract="IService" name="NetTCPBinding" behaviorConfiguration="messageSecurityBehavior">
<identity>
<certificate encodedValue="AwAAAAEAAAAUAAAAQerRMlEg2a66HMxD/8El6LutassgAAAAAQAAAOwBAAAwggHoMIIBVaADAgECAhAzOWVhNWUzM2Y5MzUwNzFhMAkGBSsOAwIdBQAwIjELMAkGA1UEBhMCVVMxEzARBgNVBAMTClNlcnZlckNlcnQwHhcNMTIwMTE3MTk1NDQ2WhcNMjUwOTI1MTk1NDQ2WjAiMQswCQYDVQQGEwJVUzETMBEGA1UEAxMKU2VydmVyQ2VydDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAs6SaYi3pDDIOuXeCe7HgOOTvOpwajKdxM8MzZpkK3l+DqkriMQUx9DT5I9WZvNK5FMuorLueG5adWkTgWpvttC7Sp8CJ//A+PbPewiAU4L3Txln6dX3jHZFd99LY/58/2AzY8ln2NykQFzz1DdmVeyShG9ktVsX82Ogz60lzpeUCAwEAAaMnMCUwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDgYDVR0PBAcDBQD6AAAAMAkGBSsOAwIdBQADgYEAMGQ7fIW34CYjybCc0gWOLaxeRFiNHmX/dgxqPIWGgg3uc0avz1GHJ3uMHcPAZBKcw9QpbccALpqZxZzkDBxufWjRni+8XCzeAKUqaB7XaJTYYUYBbz7/2+EuaAw7/vF4JTtZGWhPkHZZcX5+Oyo2ktK0z24MfXP2Ggy+IsQJ2JM=" />
</identity>
</endpoint>
</client>

所有这些工作正常。我读过服务证书用于加密客户端凭据和消息。那为什么我们需要AlgorithmSuite中指定的算法呢?它加密什么?

我需要很好地理解这一点,以便我可以在我的论文中解释它。

最佳答案

证书指向用于加密消息的 key (我不确定它是直接用作 key 本身,还是用于协商 key )。 AlgorithmSuite 确定 algorithm ,它将使用该 key 来加密消息。

为什么你需要指定一个算法吗?
因为您需要告诉 WCF 它应该如何加密您的消息。使用的算法也在 SOAP 消息中标识,因为接收方必须知道使用什么算法来解密消息。请注意,如果您没有明确设置算法,它仍然会有一个值,NetTcp 的默认 Basic256 ( source )。

如果您启用消息跟踪,您会在 SOAP 正文中看到以下内容,用于服务操作的适当(加密)操作:

<e:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc" />

如果您将 AlgorithmSuite 更改为 Basic128上面会显示 aes128-cbc在 Algorithm 属性的后一位。

在消息跟踪中,就在您的服务操作对应的 Action 之前, http://schemas.xmlsoap.org/ws/2005/02/trust/... 中会有几个 Action 。范围协商所有安全选项。关于 Message Security in WCF MSDN 页面可以看到 WCF 使用了 WS-Security 规范。有关此规范的更多信息,您可以访问 this page我在哪里找到了 WS-Security 2004 spec (pdf) .如果您的论文需要官方引用,这也可能很有用。

什么 它加密吗?
该算法对凭据和消息进行加密(使用从证书的帮助下获得的 key ),就像您已经声明的那样:-)。如果您启用 message tracing,您可以看到这一点:凭据和消息正文都将使用所选算法进行加密。

免责声明:我仍然处于 WCF 学习曲线的斜率中,因此如果您的论文成绩取决于此,您最好仔细检查我的声明:D

关于WCF NetTcpBinding 安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11960098/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com