다음을 통해 공유


HTTPS, TCP를 통한 SSL 및 SOAP 보안의 인증서 유효성 검사 차이점

HTTPS(HTTP를 통한 TLS(전송 계층 보안)) 또는 TCP를 통한 TLS와 함께 메시지 계층(SOAP) 보안이 있는 WCF(Windows Communication Foundation)의 인증서를 사용할 수 있습니다. 이 항목에서는 이러한 인증서의 유효성을 검사하는 방법의 차이점에 대해 설명합니다.

HTTPS 클라이언트 인증서 유효성 검사

HTTPS를 사용하여 클라이언트와 서비스 간에 통신하는 경우 클라이언트에서 서비스를 인증하는 데 사용하는 인증서는 신뢰 체인을 지원해야 합니다. 즉, 신뢰할 수 있는 루트 인증 기관에 연결되어야 합니다. 연결되지 않은 경우 HTTP 계층에서 "원격 서버에서 (403) 사용할 수 없음 오류를 반환했습니다."라는 메시지와 함께 WebException이 발생합니다. WCF는 이 예외를 MessageSecurityException으로 표시합니다.

HTTPS 서비스 인증서 유효성 검사

HTTPS를 사용하여 클라이언트와 서비스 간에 통신하는 경우 서버에서 인증하는 데 사용하는 인증서는 신뢰 체인을 기본적으로 지원해야 합니다. 즉, 신뢰할 수 있는 루트 인증 기관에 연결되어야 합니다. 인증서가 해지되었는지 여부를 확인하기 위해 온라인 확인을 수행하지는 않습니다. 다음 코드에서처럼 RemoteCertificateValidationCallback 콜백을 등록하여 이 동작을 재정의할 수 있습니다.

ServicePointManager.ServerCertificateValidationCallback +=
    new RemoteCertificateValidationCallback(ValidateServerCertificate);
ServicePointManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(AddressOf ValidateServerCertificate)

여기서 ValidateServerCertificate의 서명은 다음과 같습니다.

public static bool ValidateServerCertificate(
  object sender,
  X509Certificate certificate,
  X509Chain chain,
  SslPolicyErrors sslPolicyErrors)
Public Shared Function ValidateServerCertificate(ByVal sender As Object, _
                                                 ByVal certificate As X509Certificate, _
                                                 ByVal chain As X509Chain, _
                                                 ByVal sslPolicyErrors As SslPolicyErrors) As Boolean

ValidateServerCertificate를 구현하면 클라이언트 애플리케이션 개발자가 서비스 인증서의 유효성을 검사하는 데 필요하다고 판단하는 확인 사항을 수행할 수 있습니다.

TCP를 통한 SSL 또는 SOAP 보안에서 클라이언트 인증서 유효성 검사

TCP를 통한 SSL(Secure Sockets Layer) 또는 SOAP 메시지 보안을 사용하는 경우 CertificateValidationMode 클래스의 X509ClientCertificateAuthentication 속성 값에 따라 클라이언트 인증서의 유효성을 검사합니다. 속성은 X509CertificateValidationMode 값 중 하나로 설정됩니다. RevocationMode 클래스의 X509ClientCertificateAuthentication 속성 값에 따라 해지 확인을 수행합니다. 속성은 X509RevocationMode 값 중 하나로 설정됩니다.

myServiceHost.Credentials.ClientCertificate.Authentication.
    CertificateValidationMode=
    X509CertificateValidationMode.PeerOrChainTrust;

myServiceHost.Credentials.ClientCertificate.Authentication.
    RevocationMode=X509RevocationMode.Offline;
With myServiceHost.Credentials.ClientCertificate.Authentication
    .CertificateValidationMode = X509CertificateValidationMode.PeerOrChainTrust
    .RevocationMode = X509RevocationMode.Offline
End With

TCP를 통한 SSL 또는 SOAP 보안에서 서비스 인증서 유효성 검사

TCP를 통한 SSL 또는 SOAP 메시지 보안을 사용하는 경우 CertificateValidationMode 클래스의 X509ServiceCertificateAuthentication 속성 값에 따라 서비스 인증서의 유효성을 검사합니다. 속성은 X509CertificateValidationMode 값 중 하나로 설정됩니다.

RevocationMode 클래스의 X509ServiceCertificateAuthentication 속성 값에 따라 해지 확인을 수행합니다. 속성은 X509RevocationMode 값 중 하나로 설정됩니다.

myClient.ClientCredentials.ServiceCertificate.
    Authentication.CertificateValidationMode=
    X509CertificateValidationMode.PeerOrChainTrust;
myClient.ClientCredentials.ServiceCertificate.Authentication.
    RevocationMode = X509RevocationMode.Offline;
With myClient.ClientCredentials.ServiceCertificate.Authentication
    .CertificateValidationMode = X509CertificateValidationMode.PeerOrChainTrust
    .RevocationMode = X509RevocationMode.Offline
End With

참고 항목