2012-07-01 2 views
3

https를 통해 보안이 필요한 WCF 서비스가 있습니다. WCF 서비스 서버 사이트와 WCF 서비스를 사용하는 클라이언트는 모두 자체 개발되었습니다.자체 서명 된 인증서로 보안 성이 충분합니까?

자체 서명 인증서를 생성하고 다음 서비스 문서의 도움을 받아 서비스에 사용했습니다 : http://msdn.microsoft.com/en-us/library/ff647171.aspx.

<behaviors> 
    <serviceBehaviors> 
    <behavior name="SecureServiceBehavior"> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="false" /> 
     <serviceCredentials> 
     <serviceCertificate findValue="CN={my server's ip address}" /> 
     <userNameAuthentication userNamePasswordValidationMode="MembershipProvider" 
      membershipProviderName="SqlMembershipProvider" /> 
     </serviceCredentials> 
     <serviceAuthorization principalPermissionMode="UseAspNetRoles" 
     roleProviderName="SqlRoleProvider" /> 
     <serviceThrottling maxConcurrentCalls="128" 
          maxConcurrentSessions="128" 
          maxConcurrentInstances="128" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<bindings> 
    <wsHttpBinding> 
    <binding name="MyBinding"> 
     <security mode="TransportWithMessageCredential"> 
      <message clientCredentialType="UserName"/> 
     </security> 
    </binding> 
    </wsHttpBinding> 
</bindings> 

모든 WCF 클라이언트는 IP 주소로 인터넷을 통해 시스템에 액세스 할 우리 회사의 직원입니다 다음과 같이

내 서비스의 바인딩과 행동 구성이다. 서버의 인증서를 각 클라이언트 컴퓨터의 신뢰할 수있는 인증 기관에 추가합니다.

그러한 구성이 충분히 안전합니까?

+1

인증서를 클라이언트 응용 프로그램에 하드 코딩하면됩니다. – CodesInChaos

+0

클라이언트에서 인증서를 하드 코딩 할 수있는 방법을 보여주는 자습서가 있습니까? – Omtara

+0

WCF를 모르지만'SslStream' 클래스는 인증서 유효성 검사를위한 콜백을 가지고 있습니다. – CodesInChaos

답변

7

인증서가 안전하다는 것을 이해하면 확실하지 않습니다. 문제는 모든 현대 인증서가 동일하게 생성되었다고 말할 수 있습니다. 현대의 해싱 및 암호화 알고리즘은 무료로 사용할 수 있으며 사실상 거의 깨지지 않습니다. 안전하고 안전하지 않은 인증서를 구분하는 것은 신뢰 문제입니다.

잠재적 인 악의적 인 네트워크에서 신뢰할 수있는 서버를 식별하기위한 인증서가 만들어집니다. 경찰 배지 또는 신분증과 비교해 볼 수 있습니다.하지만 그보다 조금 더 있습니다. 따라서 인증서 유효 기간과 관련된 주요 질문은 다음과 같습니다.

  • 인증서를 전혀 인식합니까? (ID 유형을 전혀 인식하지 못합니까?)
  • 인증서가 인증서를 사용하는 서버와 일치합니까? (사진이 무기와 비슷합니까?)
  • 인증서가 손상되었을 수 있습니까? (ID가 도난 당했습니까?)
  • 루트 CA가 손상되었을 수 있습니까? (누군가가 위조 된 ID를 만들 수?) 보안 인증서를 만드는

문제점은 유효성에 관한 질문에 유사하다 : 모든 클라이언트에 인증서를 설치

  • 서버를 인식하는 의미 .
  • 서버가 인증서와 일치하는지 확인
  • 인증서 및 루트 CA 보안.

모든 클라이언트와 서버가 서로를 (예 : 같은 회사에있는 경우와 같이) 서로 밀접하게 인식하는 경우 자체 서명 된 인증서를 사용하여 모든 클라이언트에 수동으로 설치할 수 있으므로 그것을 인식 할 것입니다. 서버가 외부 요청에 대해 열려 있지 않으므로 (사람) 보안 상 문제가되지 않습니다. 즉, 표준 보안 지침을 준수하는 한 자체 서명 된 인증서는 문제가되지 않습니다.

외부 방문자에게 서버를 식별해야 할 때 문제가 발생합니다. 예를 들어 웹 서비스를 사용하려는 경우 내 컴퓨터에는 사용중인 인증서에 대한 개념이 없습니다 (자체 서명 된 인증서는이를 알아야하는 각 컴퓨터에 명시 적으로 설치해야하기 때문에). 따라서 https 기능은 쓸모가 없습니다. 이 경우 널리 인정 된 CA (아마도 비용이들 것입니다)에서 인증서를 얻어야합니다. 이것은 자체 서명 된 인증서보다 본질적으로 안전하지는 않지만 훨씬 더 신뢰할 수 있습니다.

+0

나는 실제로 내 CA를 설치하고 내 서버 및 클라이언트에 대한 인증서를 생성하는 데 사용했습니다. http://www.codeproject.com/Articles/28248/Securing-WCF-Services-with-Certificates – Omtara

1

"무엇을 위해 충분히 안전합니까?" 내가 물어볼 질문이다. 모든 자체 서명 인증서는 통신을 보내는 사람이 해당 인증서를 가지고있는 수준의 인증을 제공합니다.

서명이 올바른 서명이라고 믿으면 충분히 안전합니다. & 가입자가 귀하와 가장하고있는 사람이 아닌 귀하와 통신하고 있는지 확인하려면 CA 서명 인증서를 받아야합니다.

+1

클라이언트를 제어하는 ​​경우 CA 서명 인증서에 이점이 없습니다. – CodesInChaos

+1

네, 고객에게 그 정도의 자신감을주는 것이 좋습니다. CA 모델을 완전히 신뢰할 수 있는지 확신 할 수 없습니다. 특히 diginotar 스캔들 이후 http://en.wikipedia.org/wiki/DigiNotar –

0

보안 수준은 동일하지만 주요 차이점은 신뢰입니다. 당신의 상황에서 나는 싼 인증서를 살 것입니다.

+0

사실 아니요. CA 밖에서 세리 우스 문제가 있습니다. 예를 들어 인증서를 쉽게 취소 할 수 없습니다. 아무도 상업용 CA를 사용 하겠지만 자체 서명은 제한적이라고 말합니다. – TomTom