2009-10-27 3 views
17

인증서를 사용하여 클라이언트와 서버 간의 통신을 암호화하는 WCF 응용 프로그램을 만들고 있습니다. 내 개발 환경에서 makecert를 사용하여 만든 테스트 인증서/자체 서명 된 인증서를 사용하고 싶습니다. (서버 만 인증서를 가지므로 클라이언트는 그렇지 않습니다.)왜 WCF는 신원 확인 실패에 대해 불만을 제기합니까?

인증서를 인증서 저장소에 설치했는데 문제가 없습니다. 클라이언트에서는 test certificate로 작업 중이므로 현재 certificateValidationMode가 "false"로 설정되어 있습니다.

내 문제

: 나는 신원 요소를 제거하면

<endpoint ... > 
    <identity> 
     <dns value="<Name-Of-Server-Computer>"/> 
    </identity> 
</endpoint> 

, 나는 다음과 같은 오류 메시지가 : 클라이언트에서의 app.config에서

, 나는이 같은 정체성 요소를 지정해야 서버에 연결하려고하면 클라이언트에서 다음 메시지가 나타납니다.

보내는 메시지에 대한 확인 검사가 실패했습니다. 원격 종단점의 예상 DNS 신원은 'localhost'였지만 원격 종점은 'Name-Of-Server-Computer'라는 DNS 주장을 제공했습니다. 이것이 합법적 인 원격 종단점 인 경우 채널 프록시를 만들 때 EndpointAddress의 Identity 속성으로 'Name-Of-Server-Computer'라는 DNS ID를 명시 적으로 지정하여 문제를 해결할 수 있습니다.

  • 테스트/자체 서명 된 인증서를 사용하는 경우에만 수행 신원 확인인가 :

그래서 여기 내 질문입니까? CA에서 구입 한 실제 신뢰할 수있는 인증서를 사용하여 응용 프로그램을 배포 할 때 ID 확인이 수행됩니까?

  • 신원 확인을 사용 중지하는 방법이 있습니까? 내 자신의 사용자 지정 인증서 유효성 검사기를 만들 수 있지만이 방법을 사용하여 ID 검사를 재정의 할 수있는 방법이없는 것 같습니다.

  • 답변

    10

    항상 확인이 이루어져야합니다. 기본적으로 WCF는 도메인 이름 (yourcompany.com) 또는 서비스가있는 컴퓨터 이름에 인증서가 발급되었는지 확인합니다. 이것은 결코 비활성화하지 않을 보안 검사입니다! 그렇지 않으면 서비스를 스푸핑하는 사람은 임의의 도메인/컴퓨터 이름으로 만들어진 인증서를 사용하여 트래픽을 얻을 수 있습니다.

    그래서 프로덕션 서버의 실제 인증서가 실제로 프로덕션 서버가 포함될 도메인 이름으로 발급되는지 확인해야합니다. 프로덕션 서버가 "production.yourcompany.com"에 있으면 인증서를 해당 도메인에 만들어야합니다.

    마크

    +0

    > "이것은 내가 사용하지 않을 거라 보안 검사이다!" 내가 이해했는지 확인하는 것. 실제로 사용 중지하는 방법이 있다는 뜻입니까? 나는 수표의 혜택을 이해합니다 ... – Nitramk

    +1

    나는 이것에 대해서 생각조차 해본 적이 없기 때문에 그것을 끌 수있는 방법이 있는지 확인해 보지 못했습니다. 나는 모른다. 미안하다. –

    24

    이 질문에 대한 대답은 오류 메시지 자체에있다. 클라이언트에서 수행 할 수있는 작업은 다음과 같습니다.

    EndpointIdentity identity = EndpointIdentity.CreateDnsIdentity("Server"); 
    EndpointAddress address = new EndpointAddress(new Uri("net.tcp://1.2.3.4:12345/ServiceName"), identity); 
    

    예상되는대로 "서버"를 교체하십시오. 일반적으로 이것은 자체 서명 된 인증서의 공통 이름 (CN)입니다. 이렇게하면 보안을 손상시키지 않습니다. 단, 제공 한 인증서가 유효한지, 사용자 지정 인증서 유효성 검사기를 만들고 관련 검사를해야하는지에 대한 책임은 사용자에게 있습니다.

    certificateValidationMode 설정해야
    +0

    맞습니다! 이 대답은 정확합니다. –

    3

    에 "없음"... "false"를하지

    관련 문제