WCF-보안

WCF 서비스는 의도 된 클라이언트 만 서비스에 액세스 할 수 있도록 두 가지 보안 모드 또는 수준이있는 강력한 보안 시스템을 자랑합니다. 분산 트랜잭션에서 흔히 발생하는 보안 위협은 WCF에 의해 상당 부분 완화됩니다.

주요 보안 기능

WCF 서비스에는 아래 그림과 같이 네 가지 주요 보안 기능이 있습니다.

  • Authentication − 여기서 인증은 메시지 발신자를 식별하는 데 국한되지 않고 상호 적입니다. 즉, 모든 종류의 중개자 공격 가능성을 배제하기 위해 메시지 수신자의 인증이 필요합니다.

  • Authorization− 이것은 보안을 보장하기 위해 WCF 서비스에서 수행하는 다음 단계이며 서비스가 호출자에게 추가 진행을 승인해야하는지 여부가 여기에서 결정됩니다. 인증은 인증에 의존하지 않지만 일반적으로 인증을 따릅니다.

  • Confidentiality− 발신자와 서비스 간의 정보 교환은 메시지를 의도하지 않은 다른 사람의 해석을 제한하기 위해 기밀로 유지됩니다. 이를 가능하게하기 위해 암호화는 다양한 다른 메커니즘과 함께 사용됩니다.

  • Integrity − 마지막 핵심 개념은 무결성을 유지하는 것입니다. 즉, 발신자에서 수신자로가는 여정에서 메시지가 변조되지 않았 음을 보증합니다.

보안 모드 전송

WCF는 클라이언트와 서버 간의 보안 통신을 보장하기 위해 다음과 같은 전송 보안 모드를 제공합니다. 다양한 전송 보안 모드는 다음과 같습니다.

  • None−이 모드는 어떤 종류의 메시지 보안도 보장하지 않으며 서비스는 클라이언트에 대한 자격 증명을 얻지 않습니다. 이 모드는 메시지 변조를 허용 할 수 있으므로 권장되지 않으므로 매우 위험합니다.

<wsHttpBinding>
   <binding name = "WCFSecurityExample">
      <security mode = "None"/>
   </binding>
</wsHttpBinding>
  • Transport−이 모드는 TCP, IPC, Https 및 MSMQ와 같은 통신 프로토콜을 사용하여 메시지를 안전하게 전송하는 가장 쉬운 방법입니다. 이 모드는 전송이 지점 간 전송이고 제어 된 환경 (예 : 인트라넷 응용 프로그램)에서 주로 사용되는 경우 더 효과적입니다.

<wsHttpBinding>
   <binding name = "WCFSecurityExample">
      <security mode = "Transport"/>
   </binding>
</wsHttpBinding>
  • Message− 보안 모드는 상호 인증이 가능하며 메시지가 암호화되고 보안 프로토콜로 간주되지 않는 http를 통해 전송 될 수 있기 때문에 프라이버시를 크게 제공합니다. 여기서 보안은 메시지 전송에 관련된 중개자 수와 보안 전송이 있는지 여부를 고려하지 않고 종단 간 제공됩니다. 이 모드는 일반적으로 인터넷 응용 프로그램에서 사용됩니다.

<wsHttpBinding>
   <binding name = "WCFSecurityExample">
      <security mode = "Message"/>
   </binding>
</wsHttpBinding>
  • Mixed −이 보안 모드는 자주 사용되지 않으며 클라이언트 인증은 클라이언트 수준에서만 제공됩니다.

<wsHttpBinding>
   <binding name = "WCFSecurityExample">
      <security mode = "TransportWithMessageCredential"/>
   </binding>
</wsHttpBinding>
  • Both−이 보안 모드는 강력한 보안 커버를 제공하기 위해 전송 보안 및 메시지 보안으로 구성되지만 종종 전체 성능에 과부하가 발생합니다. 이것은 MSMQ에서만 지원됩니다.

<netMsmqBinding>
   <binding name = "WCFSecurityExample">
      <security mode = "Both"/>
   </binding>
</netMsmqBinding>

BasicHttpBinding을 제외한 모든 WCF 바인딩에는 기본적으로 어느 정도의 전송 보안이 있습니다.

메시지 보안 수준

메시지 수준 보안은 WCF 프로토콜에 종속되지 않습니다. 표준 알고리즘을 사용하여 데이터를 암호화하여 메시지 데이터 자체와 함께 사용됩니다. 메시지 보안 수준에 대한 서로 다른 바인딩에 대해 여러 클라이언트 자격 증명을 사용할 수 있으며 이에 대해서는 아래에서 설명합니다.

Client credentials for message level security in WCF

None− 여기에서 암호화는 메시지 보안을 위해 사용되는 반면 클라이언트 인증은 수행되지 않으므로 익명 클라이언트가 서비스에 액세스 할 수 있습니다. BasicHttpBinding을 제외한 모든 WCF 바인딩은이 클라이언트 자격 증명을 지원합니다. 그러나 NetNamedPipeBinding의 경우이 클라이언트 자격 증명을 전혀 사용할 수 없다는 점에 유의해야합니다.

  • Windows− 여기서는 실시간 로그인 사용자에 대해 메시지 암호화와 클라이언트 인증이 모두 수행됩니다. 이 경우에도 다른 모든 WCF 바인딩과 달리 NetNamedPipeBinding을 사용할 수 없으며 BasicHttpBinding은 지원을 제공하지 않습니다.

  • UserName− 여기서 메시지는 암호화되고 UserName을 제공하여 보호되며 클라이언트는 암호를 제공해야 할 때 인증됩니다. 위의 두 클라이언트 자격 증명과 마찬가지로 BasicHttpBinding은 UserName을 지원하지 않으며 NetNamedPipeBinding에 사용할 수 없습니다.

  • Certificate− 메시지 암호화와 함께 클라이언트와 서비스 모두 인증서로 인증을받습니다. 이 클라이언트 자격 증명은 사용할 수 있으며 NetNamedPipeBinding을 제외한 모든 WCF 바인딩에서 지원됩니다.

  • IssuedToken− Cardspace와 같은 기관에서 발급 한 토큰을 사용하여 메시지를 인증합니다. 메시지 암호화도 여기에서 수행됩니다.

다음 코드는 WCF 메시지 보안 수준 / 모드에서 클라이언트 자격 증명이 구성되는 방법을 보여줍니다.

<netTcpBinding>
   <binding name = "WCFMessageSecurityExample">
      <security mode = "Message">
         <message clientCredentialType = "None"/>
      </security>   
   </binding>
</netTcpBinding>

<netMsmqBinding>...</netMsmqBinding>
</bindings>
<behaviors>...</behaviors>

여기에서 전송 보안 모드는 전자가 더 빠르기 때문에 메시지 보안 수준보다 우위에 있습니다. 추가 코딩이 필요하지 않으며 상호 운용성 지원을 제공하므로 전체 성능이 저하되지 않습니다.

그러나 보안 관점에서 메시지 보안 모드는 더 강력하고 프로토콜과 독립적이며 종단 간 보안을 제공합니다.