2009-08-03 5 views
9

컴퓨터 서브넷에서 통신하는 단일 클라이언트 컴퓨터와 5 개의 서버 상자가있는 컴퓨터 제어 응용 프로그램이 있습니다. 도메인 컨트롤러가 없습니다. 안정성과 트랜잭션 지원을 위해 netTcpBinding을 사용하고 싶습니다.Windows 자격 증명이없는 netTcpBinding?

도메인 컨트롤러가없는 경우이 바인딩에서 사용자 이름/암호 인증을 사용할 수 있습니까? 사무실 LAN에 연결되지 않는 900 대의 컴퓨터 (150 대의 컴퓨터)에서 인증서를 관리하고 싶지 않기 때문에 인증서를 사용하지 않는 것이 좋습니다.

답변

10

예, 물론 - 전송 보안 대신 메시지 보안을 사용하는 경우에만 가능합니다. 지금처럼 바인딩 구성을 정의합니다

<netTcpBinding> 
    <binding name="UserNameSecurity"> 
     <security mode="Message"> 
     <message clientCredentialType="UserName"/> 
     </security> 
    </binding> 
    </netTcpBinding> 

을하고 참조하는 (서버 및 클라이언트) 엔드 포인트에 바인딩 구성 :

<endpoint address="....." 
      binding="netTcpBinding" 
      bindingConfiguration="UserNameSecurity" 
      contract="IMyService" /> 

마크

UPDATE :
아, 그래, 서버 측에서는 서비스를 호출하는 클라이언트에게 서비스를 인증하는 인증서가 필요하며 메시지를 암호화하고 서명하는데도 사용됩니다. 서버에만 있습니다. 클라이언트는 아무 것도 설치할 필요가 없습니다.

구성 :

<behaviors> 
    <serviceBehavior> 
    <behavior name="ServerInternet"> 
     <serviceCredentials> 
     <serviceCertificate 
      findValue="MyServiceCertificate" 
      storeLocation="LocalMachine" 
      storeName="My" 
      x509FindType="FindBySubjectName" /> 
     </serviceCredentials> 
    </behavior> 
    </serviceBehavior> 
</behaviors> 
<services> 
    <service name="MyServiceInternet" 
      behaviorConfiguration="ServerInternet"> 
    .... 
    </service> 
</services> 

것은 당신이 당신의 설정에서 지정하는 "주체 이름"에서, 서버의 "로컬 컴퓨터"폴더에 서버의 인증서를 설치해야합니다.

+0

그래서 원래 그게 내가 가진 것입니다. 그러나 서비스 인증서를 요청하는 예외가 발생합니다. "서비스 인증서가 제공되지 않습니다 .ServiceCredentials에 서비스 인증서를 지정하십시오." 아이디어가 있습니까? –

+0

흠. 그게 내가 의심했던 것이다. 그것을 확인해 주셔서 감사합니다. –

+0

이 접근 방식에서는 프로덕션 환경에서 자체 서명 된 인증서를 사용할 때의 해가 있습니까? 메시지를 암호화하는 데만 사용되지만 신원을 확인하는 것은 아닙니다. 메시지 암호화에 자체 서명 된 인증서를 사용하지 않으시겠습니까? – Vitalik

0

먼저 시도해 볼 수있는 것이 있습니다. serviceNegotiationCredentials를 true로 설정하십시오.

<message negotiateServiceCredential="true"/> 

이렇게하면 도메인 컨트롤러없이 클라이언트와 서비스간에 안전한 대화가 만들어집니다.

그러나 도메인 컨트롤러가없는 경우 클라이언트는 서비스를 신뢰하지 않으므로 실패합니다.

따라서 identity of the service을 설정해야합니다. WSDL에서 찾을 수 있습니다. 기본적으로 당신은 IIS에서 호스팅하는 경우, 것 같다 :

<client> 
    <endpoint> 
     <identity> 
      <servicePrincipalName value="host/NETWORKSERVICE"></servicePrincipalName> 
     </identity> 
    </endpoint> 
</client> 

나는 당신이 필요합니다 생각하지 않습니다,하지만 어쩌면 당신은 서비스 측면에서 익명 로그온을 허용해야합니다 :

<serviceBehaviors> 
    <behavior> 
     <serviceCredentials> 
      <windowsAuthentication allowAnonymousLogons="true"/> 
     </serviceCredentials> 
    </behavior> 
</serviceBehaviors> 
+1

감사합니다. 나는 negotiateServiceCredential이 netTcpBinding을 위해 존재하지 않는다고 생각한다. 나는 (상대적으로) 곧바로 앞으로 나올 것이므로 인증서 경로를 내려갈 것입니다. –

관련 문제