다음을 통해 공유


인증서 클라이언트를 사용하는 메시지 보안

다음 시나리오에서는 메시지 보안 모드를 사용하여 보호되는 WCF(Windows Communication Foundation) 클라이언트 및 서비스를 보여 줍니다. 클라이언트 및 서비스 모두 인증서를 사용하여 인증됩니다. 자세한 내용은 분산 응용 프로그램 보안을 참조하십시오.

샘플 응용 프로그램을 보려면 Message Security Certificate를 참조하십시오.

인증서를 사용하는 메시지 보안

특징 설명

보안 모드

메시지

상호 운용성

WCF에만 해당

인증(서버)

처음에 TLS(전송 계층 보안) 협상을 사용할 때 서비스 인증서를 사용하는 서버 인증이 필요합니다.

인증(클라이언트)

클라이언트 인증서 및 TLS 협상을 사용합니다.

무결성

예, TLS 프로토콜을 사용합니다.

기밀성

예, TLS 프로토콜을 사용합니다.

전송

HTTP

바인딩

WSHttpBinding

서비스

다음 코드와 구성은 독립적으로 실행되어야 합니다. 다음 작업 중 하나를 수행합니다.

  • 구성 없이 코드를 사용하여 독립 실행형 서비스를 만듭니다.
  • 제공된 구성을 사용하여 서비스를 만들지만 끝점을 정의하지 않습니다.

코드

다음 코드에서는 안전한 컨텍스트를 설정하기 위해 메시지 보안을 사용하는 서비스 끝점을 만드는 방법을 보여 줍니다.

구성

코드 대신 다음 구성을 사용할 수 있습니다.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ServiceCredentialsBehavior">
          <serviceCredentials>
            <serviceCertificate findValue="Contoso.com"
                                x509FindType="FindBySubjectName" />
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="ServiceCredentialsBehavior" 
               name="ServiceModel.Calculator">
        <endpoint address="https://localhost/Calculator" 
                  binding="wsHttpBinding"
                  bindingConfiguration="MessageAndCerficiateClient" 
                  name="SecuredByClientCertificate"
                  contract="ServiceModel.ICalculator" />
      </service>
    </services>
    <bindings>
      <wsHttpBinding>
        <binding name="WSHttpBinding_ICalculator">
          <security mode="Message">
            <message clientCredentialType="Certificate" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <client />
  </system.serviceModel>
</configuration>

클라이언트

다음 코드와 구성은 독립적으로 실행되어야 합니다. 다음 작업 중 하나를 수행합니다.

  • 이 코드와 클라이언트 코드를 사용하여 독립 실행형 클라이언트를 만듭니다.
  • 끝점 주소를 정의하지 않는 클라이언트를 만듭니다. 대신 구성 이름을 인수로 사용하는 클라이언트 생성자를 사용합니다. 예를 들면 다음과 같습니다.

코드

다음 코드에서는 클라이언트를 만듭니다. 바인딩은 메시지 모드 보안으로 설정되며 클라이언트 자격 증명 형식은 Certificate로 설정됩니다.

구성

다음 구성에서는 끝점 동작을 사용하는 클라이언트 인증서를 지정합니다. 인증서에 대한 자세한 내용은 인증서 작업을 참조하십시오. 또한 코드에서도 <identity> 요소를 사용하여 예상 서버 ID의 DNS(Domain Name System)를 지정합니다. ID에 대한 자세한 내용은 서비스 ID 및 인증를 참조하십시오.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="endpointCredentialsBehavior">
          <clientCredentials>
            <clientCertificate findValue="Cohowinery.com" 
               storeLocation="LocalMachine"
              x509FindType="FindBySubjectName" />
          </clientCredentials>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <bindings>
      <wsHttpBinding>
        <binding name="WSHttpBinding_ICalculator" >
          <security mode="Message">
            <message clientCredentialType="Certificate" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://machineName/Calculator" 
                behaviorConfiguration="endpointCredentialsBehavior"
                binding="wsHttpBinding"
                bindingConfiguration="WSHttpBinding_ICalculator"
                contract="ICalculator"
                name="WSHttpBinding_ICalculator">
        <identity>
          <dns value="Contoso.com" />
        </identity>
      </endpoint>
    </client>
  </system.serviceModel>
</configuration>

참고 항목

개념

보안 개요
서비스 ID 및 인증
인증서 작업