방법: WCF에서 X.509 인증서에 액세스할 수 있도록 설정

WCF(Windows Communication Foundation)에서 X.509 인증서에 액세스할 수 있도록 하려면 애플리케이션 코드에서 인증서 저장소 이름과 위치를 지정해야 합니다. 상황에 따라, X.509 인증서와 연결된 프라이빗 키를 포함하는 파일에 대한 액세스가 프로세스 ID에 필요할 수 있습니다. 인증서 저장소에서 X.509 인증서와 연결된 개인 키를 가져오려면 WCF에 해당 권한이 있어야 합니다. 기본적으로 소유자와 시스템 계정에서만 인증서의 프라이빗 키에 액세스할 수 있습니다.

WCF에서 X.509 인증서에 액세스할 수 있도록 설정하려면

  1. WCF를 실행 중인 계정에 X.509 인증서와 연결된 개인 키를 포함하는 파일에 대한 읽기 액세스 권한을 부여합니다.

    1. WCF에서 X.509 인증서의 프라이빗 키에 대한 읽기 권한이 필요한지 여부를 결정합니다.

      다음 표에는 X.509 인증서를 사용하는 경우 프라이빗 키를 사용할 수 있어야 하는지 여부가 자세히 표시되어 있습니다.

      X.509 인증서 사용 프라이빗 키
      아웃바운드 SOAP 메시지 디지털 서명.
      인바운드 SOAP 메시지 서명 확인. 아니요
      아웃바운드 SOAP 메시지 암호화. 아니요
      인바운드 SOAP 메시지 암호 해독.
    2. 인증서가 저장되는 인증서 저장소 위치와 이름을 확인합니다.

      인증서가 저장되는 인증서 스토리지는 애플리케이션 코드 또는 구성에 지정됩니다. 예를 들어, 다음 예에서는 인증서 위치를 이름이 CurrentUserMy 인증서 저장소로 지정합니다.

      cc.ClientCredentials.ClientCertificate.SetCertificate(
          StoreLocation.CurrentUser,
          StoreName.My,
          X509FindType.FindBySubjectName,
          "contoso.com");
      
      cc.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySubjectName, "contoso.com")
      
    3. FindPrivateKey 도구를 사용하여 인증서의 프라이빗 키가 컴퓨터에서 어디에 있는지 확인합니다.

      FindPrivateKey 도구에는 인증서 저장소 이름, 인증서 저장소 위치 및 인증서를 고유하게 식별하는 항목이 필요합니다. 도구에서는 인증서의 제목 이름이나 지문을 고유 식별자로 사용합니다. 인증서의 지문을 확인하는 방법에 대한 자세한 내용은 방법: 인증서의 지문 검색을 참조하세요.

      다음 코드 예에서는 FindPrivateKey 도구를 사용하여 46 dd 0e 7a ed 0b 7a 31 9b 02 a3 a0 43 7a d8 3f 60 40 92 9d의 지문이 있는 CurrentUserMy 저장소에 있는 인증서의 프라이빗 키 위치를 확인합니다.

      findprivatekey.exe My CurrentUser -t "46 dd 0e 7a ed 0b 7a 31 9b 02 a3 a0 43 7a d8 3f 60 40 92 9d" -a  
      
    4. WCF가 실행되는 계정을 확인합니다.

      다음 표에서는 지정된 시나리오에 대해 WCF가 실행되는 계정에 대해 자세히 설명합니다.

      시나리오 프로세스 ID
      클라이언트(콘솔 또는 WinForms 애플리케이션). 현재 로그인한 사용자.
      자체 호스팅된 서비스. 현재 로그인한 사용자.
      IIS 6.0(Windows Server 2003) 또는 IIS 7.0(Windows Vista)에서 호스팅되는 서비스입니다. NETWORK SERVICE
      IIS 5.X(Windows XP)에서 호스팅되는 서비스입니다. Machine.config 파일의 <processModel> 요소로 제어됩니다. 기본 계정은 ASPNET입니다.
    5. icacls.exe와 같은 도구를 사용하여 WCF가 실행되는 계정에 프라이빗 키가 포함된 파일에 대한 읽기 권한을 부여합니다.

      다음 코드 예에서는 지정된 파일에 대한 DACL(임의 액세스 제어 목록)을 편집하여 NETWORK SERVICE 계정에 파일에 대한 읽기(:R) 액세스 권한을 부여합니다.

      icacls.exe "C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys\8aeda5eb81555f14f8f9960745b5a40d_38f7de48-5ee9-452d-8a5a-92789d7110b1" /grant "NETWORK SERVICE":R  
      

참고 항목