문제

인증서를 사용하여 클라이언트와 서버 간의 통신을 암호화하는 WCF 응용 프로그램을 만들고 있습니다. 개발 환경에서 MakeCert를 사용하여 만든 테스트 인증서 / 자체 서명 인증서를 사용하고 싶습니다. (서버 만 인증서가 있고 클라이언트는 그렇지 않습니다).

인증서를 인증서 저장소에 설치했는데 모든 것이 잘 작동합니다. 클라이언트에서는 테스트 인증서로 작업하기 때문에 CertificateValidationMode가 현재 "False"로 설정되었습니다.

내 문제:

클라이언트의 app.config에서는 ID 요소를 다음과 같이 지정해야합니다.

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

ID 요소를 제거하면 서버에 연결하려고 할 때 클라이언트에서 다음 오류 메시지가 나타납니다.

나가는 메시지에 대한 신원 확인이 실패했습니다. 원격 엔드 포인트의 예상 DNS ID는 'LocalHost'였지만 원격 엔드 포인트는 DNS 클레임 '서버 컴퓨터'를 제공했습니다. 이것이 합법적 인 원격 엔드 포인트 인 경우, 채널 프록시를 생성 할 때 DNS Identity 'Server-Computer'를 EndPointAddress의 ID 속성으로 명시 적으로 지정하여 문제를 해결할 수 있습니다.

그래서 여기 내 질문이 있습니다.

  • 신분 검사는 테스트/자체 서명 인증서를 사용할 때만 수행됩니까? CA에서 구매 한 실제 신뢰할 수있는 인증서를 사용하여 응용 프로그램을 배포 할 때 여전히 신원 확인이 이루어 집니까?

  • 신원 확인을 비활성화하는 방법이 있습니까? 나는 내 자신의 사용자 정의 인증서 유효성 검사기를 만들 수 있다는 것을 알고 있지만,이를 사용하여 신분 점검을 무시할 수있는 방법은없는 것 같습니다.

도움이 되었습니까?

해결책

수표는 항상 이루어집니다. 기본적으로 WCF는 인증서가 도메인 이름 (YourCompany.com) 또는 서비스가있는 기계 이름으로 발행되는지 확인합니다. 이것은 내가 결코 비활성화하지 않는 보안 점검입니다! 그렇지 않으면, 서비스를 스푸핑하는 사람은 누구나 임의의 도메인 / 기계 이름으로 만든 인증서를 사용하고 원하는 것이 아니라 트래픽을 얻을 수 있습니다!

따라서 프로덕션 서버의 실제 인증서가 프로덕션 서버가 "Production.yourCompany.com"에있는 경우 프로덕션 서버가 해당 도메인 이름으로 발행되도록해야합니다. 인증서는 해당 도메인으로 만들어야합니다.

마크

다른 팁

이 질문에 대한 답은 오류 메시지 자체에 있습니다. 클라이언트에서 할 수 있습니다.

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

예상대로 "서버"를 교체하십시오. 일반적으로 이것은 자체 서명 된 인증서의 공통 이름 (CN)입니다. 그렇게하는 것은 보안을 망치지 않을 것입니다. 제시된 인증서가 유효하고 사용자 정의 인증서 유효성 검사기를 만들고 관련 점검을하는 것입니다.

인증서 validationMode는 "false"가 아닌 "없음"으로 설정해야합니다 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top