인증서 인증을 사용하는 전송 보안
다음 시나리오에서는 X.509 인증서에 의해 보안된 WCF(Windows Communication Foundation) 클라이언트 및 서비스를 보여 줍니다. 각 클라이언트마다 클라이언트 SSL(Secure Sockets Layer) 인증에 대해 사용할 수 있는 인증서가 있으며 서비스에 의해 신뢰할 수 있습니다. 이 예제에서는 요청/회신 메시지 패턴을 보여 줍니다.
서비스에서 인증서 사용에 대한 자세한 내용은 인증서 작업 및 방법: SSL 인증서를 사용하여 포트 구성을 참조하십시오.
특징 | 설명 |
---|---|
보안 모드 |
전송 |
상호 운용성 |
기존 웹 서비스 클라이언트 및 서비스에 사용됩니다. |
인증(서버) 인증(클라이언트) |
예(HTTPS 사용) 예(인증서 사용) |
무결성 |
예 |
기밀성 |
예 |
Transport |
HTTPS |
바인딩 |
서비스
다음 코드와 구성은 독립적으로 실행되어야 합니다. 다음 작업 중 하나를 수행합니다.
- 구성 없이 코드를 사용하여 독립 실행형 서비스를 만듭니다.
- 제공된 구성을 사용하여 서비스를 만들지만 끝점을 정의하지 않습니다.
코드
다음 코드에서는 전송 보안 및 인증서를 사용하는 서비스 끝점을 만드는 방법을 보여 줍니다.
구성
다음 구성은 서비스를 설정하는 데 코드 대신 사용할 수 있습니다.
<bindings>
<wsHttpBinding>
<binding name="CertificateWithTransport">
<security mode="Transport">
<transport clientCredentialType="Certificate"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<services>
<service name="ServiceModel.Calculator"
behaviorConfiguration="credentialConfig" >
<endpoint address=""
binding="wsHttpBinding"
bindingConfiguration="CertificateWithTransport"
contract="ServiceModel.ICalculator" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="credentialConfig">
<serviceCredentials>
<clientCertificate trustedStoreLocation="LocalMachine"
revocationMode="Online"/>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
클라이언트
다음 코드와 구성은 독립적으로 실행되어야 합니다. 다음 작업 중 하나를 수행합니다.
- 이 코드와 클라이언트 코드를 사용하여 독립 실행형 클라이언트를 만듭니다.
- 끝점 주소를 정의하지 않는 클라이언트를 만듭니다. 대신 구성 이름을 인수로 사용하는 클라이언트 생성자를 사용합니다. 예를 들면 다음과 같습니다.
코드
다음 코드에서는 클라이언트를 만듭니다. 바인딩은 TCP 전송과 함께 사용하고 클라이언트 자격 증명 형식이 Windows로 설정된 전송 모드 보안을 사용하도록 구성됩니다.
구성
다음 구성 코드는 클라이언트에 적용되며 마찬가지로 인증서 위치 및 이를 찾는 데 사용할 값을 지정합니다.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="credentialConfiguration">
<clientCredentials>
<clientCertificate findValue="Contoso.com"
storeLocation="CurrentUser"
x509FindType="FindBySubjectName" />
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_ICalculator">
<security mode="Transport">
<transport clientCredentialType="Certificate" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="https://machineName/Calculator"
behaviorConfiguration="credentialConfiguration"
binding="wsHttpBinding"
bindingConfiguration="WSHttpBinding_ICalculator"
contract="ICalculator"
name="WSHttpBinding_ICalculator" />
</client>
</system.serviceModel>
</configuration>