2010-01-26 2 views
0

IIS를 통해 배포 된 WCF 서버가 있습니다. 그것을위한 인증서를 만들고 싶습니다. 서버를 인증서 서버로 만들어서이 작업을 수행 할 수 있습니다.클라이언트가 등록 된 신뢰할 수있는 인증서가 아니어도 서버 인증서를 신뢰할 수 있습니까?

하지만 클라이언트가 해당 서버에 연결할 때 클라이언트가 "신뢰할 수있는 기관"으로 서버를 등록 할 필요없이 인증서를 자동으로 신뢰하기를 원합니다.

이것이 가능합니까?

이 모든 것이 WCF 서비스에 사용자 이름 암호 보호를 적용하는 데 많은 도움이되는 것처럼 보입니다!

+0

사용자 이름/비밀번호 인증에 인증서가 필요하지 않습니다. Mutual Certificate auth 또는 Username-over-Transport를 수행하려고합니까? 대답은 조금씩 다릅니다. – Aaronaught

+0

WCF에서 인증서없이 사용자 이름/암호 인증을 어떻게 수행합니까? –

+0

@Keith - WCF에서는 전송이 안전하다고 생각하여 WCF를 속일 수있는 행동을 취하지 않는 한 기본 메시지 기반 인증을 사용할 수 없습니다. 일반적으로 WCF가 아닌 것을 알고 있다면 (WCF가 그렇게 생각하지 않을 때 전송이 안전하다는 것을 알고 있다면) 그렇게 할 것입니다. –

답변

2

짧은 대답은 아니요입니다. 클라이언트는 서버 인증서 루트를 신뢰할 수있는 기관으로 추가해야합니다.

약간 더 긴 대답은 메시지 기반 인증을 사용할 때 WCF에서 전송 보안을 구현해야하는 경우에 대한 해결책이 있다는 것입니다.이 해결 방법은 일반적으로 WCF 서버가 인식하지 못하는 다른 보안 메커니즘을 사용하려는 경우에 사용됩니다 SSL을 제공하는 ISA 서버와 같습니다.

게시물은 Yaron Naveh's입니다. 중요한 개념은 보안 척하는 전송 바인딩을 만드는 것입니다.

이 모든 것을 가지고도 여전히 보안이 필요합니다 (사용자는 명확하게 사용자의 신용 정보를 보내지 않으므로 사용자 인증서에 대한 신뢰 체인이 필요합니다). 따라서 실제로 도움이되지는 않을지 모르지만 고려해 볼 수있는 몇 가지 옵션이 제공되기를 바랍니다.

편집

내 대답은 오해의 소지가 있었다면 죄송합니다. 서버 인증서 루트 인증서는 클라이언트에서 신뢰할 수있는 저장소에 있어야합니다. 내 추가 세부 사항은 보안을 제공하는 또 다른 옵션을 제공했습니다 (SSL 연결을 제공하기 위해 신뢰할 수있는 인증서가있는 ISA 서버를 사용할 수 있음)

비슷한 상황에서 클라이언트가 아닌 클라이언트) 필요한 루트 인증서를 프로그래밍 방식으로 설치했습니다. 그런 방법이있을 것입니다 How can I install a certificate into the local machine store programmatically using c#?

+0

ok, 자동으로 할 수있다. 클라이언트 측에서 인증서를 수락 하시겠습니까? 기본적으로 클라이언트 프로그램이 사용자 이름/비밀번호를 기입하는 것 이외의 특별한 작업을하고 싶지 않다. –

+0

@Keith 아니요 - 내 대답이 오도 된 경우에 유감스럽게 생각합니다. 저장소에 인증서 트러스트 체인의 루트가 있으려면 클라이언트가 필요합니다. 프로그래밍 방식으로 certs를 설치하는 방법을 자세히 설명하는 SO 게시물에 대한 링크를 게시했습니다. –

1

잘한다면, 그것은 보안 구멍이 될 것입니다 :

여기 그렇게하는 방법을 자세히 설명 SO를 게시물입니다.

인증서가 신뢰할 수있는 기관에 연결되어 있지 않으면 쉽게 위조됩니다. 따라서 직접 또는 다른 방법으로 (직접 또는 사용자가 제어하는 ​​부모 인증서를 통해) 링크하거나 인증서가 필요하지 않도록 클라이언트를 구성합니다 (예 : https가 아닌 http 사용).

그냥 가능한 공격 시나리오의

하나는 중앙 공격에 남자는 공격의 다양한

편집를 열어 고객 잎 것을 명심 - 프로그램이 당신의 사이에 자신을 삽입 서비스 및 클라이언트와 채널 자체 정보를. 이렇게하면 침입자가 정보 흐름을 완벽하게 제어 할 수 있습니다.

암호의 복사본을 만들거나 원하는 방향으로 결과를 "조정"할 수 있습니다. 이 문제를 방지하는 유일한 방법은 인증서입니다.그러나 뿌리가 내리지 않으면 위조 될 수 있습니다.

+0

WCF 서비스의 경우 http를 통해 메시지 기반 인증을 수행하는 것은 언급 한 것과 같은 해결 방법을 사용하지 않고는 불가능합니다. 그리고 당신이 말한 것처럼, 그러한 해결 방법을 사용하는 것은 일반적으로 하나가 무엇을하는지 모르는 한 나쁜 생각입니다. –

+0

큰 보안 구멍이 어떻게 보이지 않습니까? 고객이 연결할 수있게하려면 비밀번호와 사용자 이름을 보내야합니다. WCF에서는 암호화 된 연결을 통해 인증서가 필요하지 않기 때문에 그렇게 할 수 없습니다. 따라서 본질적으로 호스트에 유효한 클라이언트가 있거나 클라이언트가 올바른 호스트에 연결되어 있는지 상관하지 않습니다. 나는 이것이 주로 중간 보호 계획에있는 사람이라고 생각합니다. –

1

코드에이를 추가 할 수 있지만 수행중인 작업을 알고 있어야합니다.

System.Net.ServicePointManager.ServerCertificateValidationCallback += (se, cert, chain, sslerror) => { return true; }; 
관련 문제