Usando o certificado Wcf SSl sobre Tcp sem certificado de cliente (somente no lado do servidor)
Existe alguma maneira de usar o WCF SSL com NetTcpBinding que não exigiria um certificado de cliente para ser instalado na máquina do cliente? (SSL V2 se não me engano).
queremos que o certificado do servidor esteja no armazenamento confiável do cliente para autenticação e criptografando sua mensagem pela chave pública do servidor, o que significa que somente a máquina servidora terá um certificado de chave privada.
estamos usando um NetTcpBinding e não customBinding nos dois lados. Se for possível, qual é a configuração correta para isso? (nas configurações do cliente e do servidor)
Desde já, obrigado.
aqui estão minhas configurações de wcf.
CONFIGURAÇÃO DO SERVIDOR:
<configuration>
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="TcpSecureBinding">
<security mode="Transport">
<transport clientCredentialType="Certificate"/>
</security>
</binding>
</netTcpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceCredentialsBehavior">
<serviceDebug includeExceptionDetailInFaults="True" />
<serviceMetadata httpGetEnabled="true" />
<serviceAuthorization
principalPermissionMode="UseWindowsGroups">
</serviceAuthorization>
<serviceCredentials>
<windowsAuthentication includeWindowsGruops="true"
allowAnonymousLogons="false"/>
<clientCertificate>
<authentication certificateValidationMode="none"/>
</clientCertificate>
<serverCertificate
findValue="thumbprint"
storelocation="LocalMachine"
x509FindType="FindMyThumbprint"
storeName="My"/>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="ServiceCredentialsBehavior"
name="ServiceModel.Calculator">
<endpoint address="net.tcp://localhost:8040/Calculator"
binding="netTcpBinding"
bindingConfiguration="TcpSecureBinding"
contract="ServiceModel.ICalculator" >
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
</service>
</services>
</system.serviceModel>
</configuration>
CONFIG CLIENTE:
<configuration>
<system.serviceModel>
<client>
<endpoint address="net.tcp://localhost:8040/Calculator"
behaviorConfiguration="endpointCredentialBehavior"
binding="netTcpBinding"
bindingConfiguration="Binding1"
contract="ServiceModel.ICalculator">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
</client>
<behaviors>
<endpointBehaviors>
<behavior name="endpointCredentialBehavior">
</behavior>
</endpointBehaviors>
</behaviors>
<bindings>
<netTcpBinding>
<binding name="Binding1">
<security mode="Transport">
<transport clientCredentialType="Windows" />
</security>
</binding>
</netTcpBinding>
</bindings>
</system.serviceModel>
</configuration>
estou adicionando minhas configurações atuais de servidor e cliente. outras perguntas:
no nível de autenticação, queremos que o cliente autentique o certificado do servidor (acho que a chave pública do servidor deve estar na loja trustedPeople), isso é possível?
você nos recomenda usar segurança ou mensagem de transporte?
se quisermos autenticar cliente e servidor por NTLM (clientCredentialType = Windows), isso pode ser feito além da autenticação de certificação do servidor ou apenas um deles pode ser aplicado? Até agora, usamos a autenticação NTLM.
agora estou recebendo exceção: "A atualização solicitada não é suportado por 'net.tcp: // servername: 8040 /**'. Isso pode ser devido a ligações incompatíveis (por exemplo, segurança ativada no cliente e não no servidor). "Eu entendo que esse erro ocorreu porque o cliente está usando o Windows Security e servidor no om certificado, mas quando estou mudando a segurança do cliente para certificado também , estou recebendo um erro: "O certificado de cliente não é fornecido", mas eu não quero definir o certificado do cliente e isso é parte do meu problema principal.
lemos que podemos usar para a autenticação do servidor cert esta tags:
<identity>
<certificate encodedValue="encoded certificate"/>
</identity>
mas, eu acho que essa autenticação por identidade é feita por um certificado codificado quando nós preferimos que a identificação do certificado seja realizada pela busca da chave pública do servidor na loja do cliente (trustedPeople). Esta informação é realmente verdadeira? que essas tags de identidade são alternativas à pesquisa de chave pública na loja confiável do cliente?
Espero que você seja capaz de ajudar neste caminho, obrigado novamente.