ASP.NET 웹 응용 프로그램의 인증에 클라이언트 인증서를 사용하여 웹 서비스를 호출하는 방법

기술 자료 번역 기술 자료 번역
기술 자료: 901183 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

요약

가 이 문서에서는 ASP.NET 웹 응용 프로그램에서 웹 서비스 인증에 클라이언트 인증서를 전달하는 방법에 대해 설명합니다.

참고 사용자가 웹 서비스를. 수행할 없습니다 호출하면 HttpWebRequest 클래스를 사용하여 직접 HTTP 요청을 할 때 이 문서에 나와 있는 단계를 적용할 수도

소개

자주 웹 서비스에 웹 서비스를 호출하는 응용 프로그램을 인증해야 합니다. 웹 서비스는 웹 서비스 권한 부여를 수행하기 전에 응용 프로그램에서 호출하는 중 인증을 수행해야 합니다. 인증 기술 중 하나는 클라이언트 인증서를 제시하여 웹 서비스를 호출하는 응용 프로그램에 필요한 것입니다.

ASP.NET 웹 응용 프로그램의 인증서 인증을 사용하는 웹 서비스를 호출할 때 "액세스가 거부되었습니다" 오류 메시지가 나타날 수 있습니다. 콘솔 응용 프로그램 또는 Microsoft Windows Forms 응용 프로그램을 동일한 웹 서비스를 호출하는 경우 오류 메시지는 나타나지 않습니다.

컴퓨터에 두 개의 다른 인증서 저장소 유지하기 때문에 이 문제가 발생합니다.
  • 로컬 컴퓨터 저장소: 이 저장소에서 클라이언트 인증서를 찾을 수 있는 ASP.NET 웹 응용 프로그램을 찾습니다.
  • 로컬 사용자 저장소에: 대화형 사용자 응용 프로그램입니다 클라이언트 인증서를 찾는 데 이 저장소를 찾습니다.
일반적으로 클라이언트 인증서를 대화형 사용자가 응용 프로그램을 설치할 때 클라이언트 인증서는 로컬 사용자 저장소에 설치됩니다. 따라서, 클라이언트 인증서 대화형 사용자 응용 프로그램에 대해 작동합니다. 그러나, 클라이언트 인증서 ASP.NET 웹 작동하지 않는 응용 프로그램.

추가 정보

클라이언트 인증서를 사용하도록 ASP.NET 응용 프로그램을 사용하려면 로컬 컴퓨터 저장소에서 클라이언트 인증서를 설치해야 합니다. 클라이언트 인증서를 로컬 컴퓨터 저장소에서 클라이언트 인증서를 설치할 때만 및 클라이언트 인증서를 설치한 사용자가 Administrators 그룹의 사용자 계정에 대해 사용할 수 있습니다. 따라서 클라이언트 인증서 ASP.NET 웹 응용 프로그램을 실행하는 데 사용되는 사용자 계정에 대한 액세스를 부여해야 합니다.

참고 로컬 컴퓨터 저장소에서 클라이언트 인증서를 사용하도록 설치된 Microsoft .NET Framework 1.1 서비스 팩 1 (SP1) 있어야 합니다.

또한 ASP.NET 웹 응용 프로그램에서 웹 서비스를 호출하면 응용 프로그램이 합니다 인증서 저장소에서 클라이언트 인증서를 내보내는 클릭한 다음 클라이언트 인증서를 웹 서비스 호출을 추가합니다.

클라이언트 인증서를 설치하고 사용자 계정에 대한 액세스 허용

클라이언트 인증서 설치 및 클라이언트 인증서 ASP.NET 웹 응용 프로그램을 실행하는 데 사용되는 사용자 계정에 대한 권한을 부여하려면 다음과 같이 하십시오.

단계 1: 로컬 컴퓨터 저장소 클라이언트 인증서 설치

클라이언트 인증서를 PKCS # 12 (.pfx) 파일에 있는 경우 Microsoft Windows HTTP 서비스 인증서 구성 도구를 사용할 수 있습니다 (WinHttpCertCfg.exe) 클라이언트 인증서를 설치할 수 및 네트워크 서비스 계정에 같은 추가 사용자 계정 위한 클라이언트 인증서를 권한을 부여합니다. 이렇게 하려면 다음과 같이 하십시오.
  1. 다운로드 및 Microsoft Windows HTTP 설치 인증서 서비스 구성 도구. 이 도구를 구하려면 다음 Microsoft 웹 사이트를 방문하십시오.
    http://www.microsoft.com/downloads/details.aspx?familyid=c42e27ac-3409-40e9-8667-c748e422833f
  2. 명령 프롬프트에서 다음 명령을 실행하십시오.
    winhttpcertcfg - PFXFile i-c LOCAL_MACHINE\My - a IWAM_TESTMACHINE -p PFXPassword
    참고PfxFile .pfx 파일 이름입니다. Password 파일에 암호가 필요하지 않으면 생략할 경우 -p 매개 변수.

    일반적으로 WinHttpCertCfg.exe 파일은 다음 폴더에 있습니다.
    C:\Program Files\Windows 리소스 Kits\Tools
.pfx 파일에 액세스할 경우, Microsoft Windows Server 2003 또는 Microsoft Windows 2000 Server를 실행 중인 컴퓨터에서 Microsoft 인증서 서비스를 설치한 요청 및 로컬 컴퓨터 저장소에 직접 클라이언트 인증서를 설치합니다. 이렇게 하려면 다음과 같이 하십시오.
  1. 관리자 자격 증명을 가진 사용자 계정을 사용하여 클라이언트 컴퓨터에 로그온하십시오.
  2. 인증 기관 Microsoft Internet Explorer에서 방문하는 웹 사이트 (CA). 예를 들어, CAServer CA 서버 이름의 경우 다음 웹 사이트를 방문하십시오.
    http://CAServer/certsrv
  3. 작업 선택 에서 인증서 요청 을 클릭한 다음 고급 인증서 요청 을 클릭하십시오.
  4. 만들기 및 이 CA에 요청을 제출할.
  5. 해당 고급 인증서 요청 있는 폼, 이름 및 전자 메일 주소를 입력합니다.
  6. 에 있는 필요한 인증서의 형식 섹션에서 클라이언트 인증 인증서 를 클릭합니다.
  7. 키 옵션 구역에서 인증서를 로컬 컴퓨터의 인증서 저장소에 저장 확인란을 클릭한 다음 제출 을 클릭하십시오.

    클라이언트 인증서에 대한 요청 ID 유의하십시오.
  8. 잠재적인 스크립팅 위반 에서 대화 상자에서 를 클릭합니다.
  9. 클라이언트 인증서가 CA에서 발급한 후 을 클릭한 다음 보류 중인 인증서 요청의 상태 표시 를 클릭하십시오.
  10. 보기 인증서 요청을 선택 에서 7단계에서 제출된 인증서 요청을 클릭하십시오.
  11. 이 인증서 설치 를 누른 다음 잠재적인 스크립팅 위반 대화 상자에서 클릭하십시오.

2단계: 클라이언트 인증서 액세스 구성

이 단계는 로컬 컴퓨터 저장소에 저장된 클라이언트 인증서에 액세스할 ASP.NET 계정에 사용 권한을 부여해야 합니다. Windows Server 2003에서 웹 응용 프로그램을 실행하기 위한 기본 계정을 네트워크 서비스 계정입니다. 따라서 인증서 네트워크 서비스 계정에 대한 액세스를 부여해야 합니다. ASP.NET 실행되도록 사용자 지정 계정을 구성한 경우 사용자 지정 계정에 대한 액세스 권한을 부여해야 합니다.

참고 Microsoft 인터넷 정보 서버 (IIS) 5, ASP.NET 실행을 아래에 있는 ASPNET 계정 및 네트워크 서비스에서 않는 계정. 따라서 ASPNET 계정은 IIS 5.0을 실행하는 컴퓨터에 대한 사용 권한을 부여해야 합니다.

특정 사용자 계정에 대한 액세스를 허용하려면 명령 프롬프트에서 다음 명령을 실행하십시오.
WinHttpCertCfg.exe -g-c LOCAL_MACHINE\MY -s "IssuedToName" - a "AccountName"
참고AccountName 로컬 컴퓨터 계정이나 도메인 계정 이름입니다. IssuedToName 회사 또는 클라이언트 인증서가 발급된 도메인 이름입니다. 이 명령은 대/소문자를 구분하지 않는 검색 문자열을 포함합니다. 검색 문자열을 문자열이 포함된 주제 이름을 가진 첫 번째 열거형된 인증서를 찾습니다.

다음 명령줄 명령은 클라이언트 인증서가 있는 Microsoft 인터넷 정보 서비스 (IIS) 6.0 네트워크 서비스 계정에 대한 액세스를 부여하는 방법 예는 다음과 같습니다.
WinHttpCertCfg.exe -g-c LOCAL_MACHINE\MY -s "IssuedToName" - a "NetworkService"
다음 명령줄 명령은 클라이언트 인증서 IIS 5 .0에서 ASPNET 계정에 대한 액세스를 부여하는 방법에 대한 예입니다.
WinHttpCertCfg.exe -g-c LOCAL_MACHINE\MY -s "IssuedToName" - a "ASPNET"
참고 Windows HTTP 서비스 인증서 구성 도구를 사용할 때 클라이언트 인증서와 한 단계에서 클라이언트 인증서에 대한 액세스를 구성하는 과정을 가져오는 프로세스를 결합할 수 있습니다. 예를 들어, 다음 명령줄 명령은 두 프로세스를 수행합니다.
Winhttpcertcfg.exe - PFXFile i-c LOCAL_MACHINE\My - a “ AccountName

3 단계: 클라이언트 인증서를 로컬 사용자 저장소에서 로컬 컴퓨터 저장소에 복사

클라이언트 인증서를 Windows Forms 응용 프로그램 또는 명령줄 응용 프로그램을 같은 대화형 응용 프로그램을 액세스할 수 있으면 클라이언트 인증서는 이미 로컬 사용자 저장소에 저장됩니다. 하지만 ASP.NET 웹 응용 프로그램 (예: 서비스 응용 프로그램은 동일한 클라이언트 인증서를 액세스할 수 없으면 클라이언트 인증서는 로컬 컴퓨터 저장소 저장될 수 없습니다.

이 단계는 인증서 내보내기 마법사를 사용하여 클라이언트 인증서를 로컬 사용자 저장소에 로컬 컴퓨터 저장소에 복사하는 방법에 대해 설명합니다.

참고 클라이언트 인증서가 이미 로컬 컴퓨터 저장소에 경우 또는 클라이언트 인증서를 파일로 1단계에서 로컬 컴퓨터 저장소에 직접 설치하는 경우 4단계로 이동하십시오. 그러나 3단계 사용하는 경우 2단계를 클라이언트 인증서에 대한 액세스를 허용하려면 사용하면 다음 반환해야 합니다.

로컬 컴퓨터 저장소에 클라이언트 인증서가 복사하려면 다음 이 단계를 수행하십시오.
  1. 시작 을 누르고 실행mmc 를 입력한 다음 확인 을 누릅니다.
  2. 파일 메뉴에서 스냅인 추가/제거를 클릭한 다음 추가 클릭하십시오.
  3. 독립 실행형 스냅인 추가 대화 상자에서 인증서추가, 컴퓨터 계정 을 클릭합니다. 그리고 다음 을 클릭한 다음 마침 을 클릭하십시오.
  4. 독립 실행형 스냅인 추가 대화 상자에서 인증서추가, 내 사용자 계정 을 클릭한 다음 마침 을 클릭하십시오.
  5. 닫기 를 누른 다음 확인 을 누릅니다.
  6. 로컬 사용자 저장소에서 클라이언트 인증서를 내보내려면 다음과 같이 하십시오.
    1. 인증서 - 현재 사용자, 개인 을 확장한 다음 인증서 를 클릭하십시오.
    2. 클라이언트 인증서를 마우스 오른쪽 단추로 클릭하고, 모든 작업, 내보내기 를 누른 후 다음 을 클릭하십시오.
    3. 예, 개인 키를 내보냅니다 옵션이 사용할 수 없는 경우 ASP.NET 웹 응용 프로그램은 클라이언트 인증서를 사용할 수 없습니다. 다른 클라이언트 인증서를 얻어야 합니다. 이렇게 하려면 1단계 및 2단계 지시를 따릅니다. 그렇지 않으면, 예, 개인 키를 내보냅니다 클릭한 다음 두 번 누릅니다.
    4. 암호 상자 및 암호 확인 상자에 암호를 입력하고 을 누릅니다.
    5. 파일 이름 상자에 파일 이름을 입력하십시오. 다음 을 누른 다음 마침 을 누릅니다.
    6. 인증서 내보내기 마법사 대화 상자에서 확인 을 누릅니다.
  7. 로컬 컴퓨터 저장소에 클라이언트 인증서를 가져오려면 다음과 같이 하십시오.
    1. 인증서 (로컬 컴퓨터)를 확장한 다음 개인 을 확장하십시오.
    2. 인증서 를 마우스 오른쪽 단추로, 모든 작업가져오기 를 차례로 클릭한 후 다음 을 클릭하십시오.
    3. 파일 이름 상자에 단계 6e 지정된 파일 이름을 입력한 후 다음 을 클릭하십시오.
    4. 암호 상자에 6 단계 d에서 지정한 암호를 입력하고 을 두 번 누릅니다.
    5. 마침 을 누른 다음 확인 을 누릅니다.

4 단계: CA의 루트 인증서 설치

VeriSign, 같은 외부 CA에 클라이언트 인증서를 이미 서명된 경우 또는 CA에 대한 루트 인증서가 이미 설치되어 있는 경우에는 4단계 생략할 수 있습니다.

기본적으로 신뢰할 수 있는 루트 인증서 저장소에 이미 미리 많은 외부 CA의 루트 인증서는 Windows가 있습니다.
루트 인증서가 설치되어 있는지 확인하십시오.
CA 루트 인증서가 설치되어 있는지 확인하려면 다음과 같이 하십시오.
  1. 시작 을 누르고 실행mmc 를 입력한 다음 확인 을 누릅니다.
  2. 파일 메뉴에서 스냅인 추가/제거를 클릭한 다음 추가 클릭하십시오.
  3. 독립 실행형 스냅인 추가 대화 상자에서 인증서추가, 컴퓨터 계정 을 클릭합니다. 그리고 다음 을 클릭한 다음 마침 을 클릭하십시오.
  4. 닫기 를 누른 다음 확인 을 누릅니다.
  5. 인증서 (로컬 컴퓨터), 신뢰된 인증 기관 을 차례로 확장한 다음 인증서 를 클릭하십시오.
  6. 오른쪽 창에서 사용할 CA 루트 인증서가 표시되는지 확인하십시오.
루트 인증서 설치
사용할 CA 루트 인증서가 목록에 없으면 루트 인증서를 설치해야 합니다. 사용할 CA 루트 인증서를 수 .cer 파일로, .der 파일을 .pfx 파일 같은 인증서 파일에서 발급되었으면, 다음과 같이 하십시오.
  1. 인증서 (로컬 컴퓨터), 신뢰된 인증 기관 마우스 오른쪽 단추로, 모든 작업 을 확장한 다음 가져오기 를 클릭하십시오.
  2. 인증서 가져오기 마법사 대화 상자에서 다음 을 클릭한 다음 파일 이름 상자에 인증서 파일 이름을 입력한 다음 두 번 누릅니다.
  3. 마침 을 누른 다음 확인 을 누릅니다.
루트 인증서 요청
사용할 CA Microsoft 인증서 서비스 설치 데이터베이스에 포함되어 있는 경우 루트 인증서를 요청할 수 있습니다. 이렇게 하려면 다음과 같이 하십시오.
  1. Internet Explorer에서 CA 웹 사이트를 방문하십시오. 예를 들어, CAServer CA 서버 이름의 경우 다음 웹 사이트를 방문하십시오.
    http://CAServer/certsrv
  2. CA 인증서, 인증서 체인 또는 CRL 다운로드 를 누른 다음 다운로드 CA 인증서를.
  3. 파일 다운로드 대화 상자에서 저장 을 클릭하십시오.
  4. 다른 이름으로 저장 대화 상자에서 원하는 인증서 파일을 저장할 위치를 입력한 다음 저장 을 클릭하십시오.
  5. 루트 인증서 파일을 저장한 후에 단계가 신뢰된 인증 기관 저장소에 인증서 파일을 설치할 수 있는 루트 인증서 설치"절을 사용하십시오.

웹 서비스 호출

로컬 컴퓨터 저장소 또는 로컬 사용자 저장소를 클라이언트 인증서를 설치한 후 ASP.NET 웹 응용 프로그램에서 웹 서비스를 호출하는 클라이언트 인증서에 액세스할 수 있습니다. 클라이언트 인증서에 액세스할 수 있는 단계는 Windows Forms 응용 프로그램 또는 ASP.NET 웹 동일합니다 응용 프로그램.

.NET Framework 1.1을 사용하는 경우 먼저 키를 DER 인코딩 파일로 내보내야 합니다. System.Security.Cryptography.X509Certificates.X509Certificate 클래스 인증서 저장소에서 인증서 세부 정보를 직접 액세스할 수 있는 방법이 없기 때문에 키를 내보내야 합니다. 따라서 응용 프로그램이 DER 인코딩 파일에서 인증서의 세부 정보를 읽어야 합니다.

참고 Microsoft .NET (WSE) 웹 서비스 향상 2.0 응용 프로그램 직접 인증서 저장소에서 인증서 세부 정보를 검색할 수 있는 방법을 제공합니다.

다음 C# 예제에서는 코드 인증에 클라이언트 인증서를 전달하는 웹 서비스를 호출하는 방법을 보여 줍니다.
using System.Security.Cryptography.X509Certificates;
...

  public void CallWebService()
  {
    // TODO: Replace <C:\WSClientCert.cer> with the path of your certificate file.
    string certPath = @"<C:\WSClientCert.cer>";

    // Create an instance of the Web service proxy.
    WebSvc.math mathservice = new WebSvc.math();
    // TODO: Replace <https://wsserver/securemath/math.asmx> with a valid URL.
    mathservice.Url = @"<https://wsserver/securemath/math.asmx>";

    // Create an X509Certificate object from the information 
    // in the certificate export file, and then add the certificate to the 
    // ClientCertificates collection of the Web service proxy.
    mathservice.ClientCertificates.Add(
        X509Certificate.CreateFromCertFile(certPath));

    long lngResult = 0;
    try
    {
      lngResult = mathservice.Add(Int32.Parse(operand1.Text), 
          Int32.Parse(operand2.Text));
      string result = lngResult.ToString();
    }
    catch(Exception ex)
    {
      if(ex is WebException)
      {
        WebException we = ex as WebException;
        WebResponse webResponse = we.Response;
        throw new Exception("Exception calling method. " + ex.Message);
      }
    }
  }

Microsoft .NET 웹 서비스 향상 2.0

Microsoft .NET 클래스 라이브러리를 최신 웹 서비스 프로토콜을 사용하여 웹 서비스 구축을 위한 웹 서비스 향상 2.0에 대한 Microsoft .NET (WSE) 입니다. 이러한 프로토콜은 다음과 같습니다.
  • WS-Security
  • WS-SecureConversation
  • WS-Trust
  • WS-Policy
  • WS-SecurityPolicy
  • WS-Addressing
  • WS-첨부 파일
참고 WSE는 .NET Framework의 포함되어 있지 않습니다. WSE 구하려면 다음 Microsoft 웹 사이트를 방문하십시오.
http://www.microsoft.com/downloads/details.aspx?FamilyId=FC5F06C5-821F-41D3-A4FE-6C7B56423841
이러한 프로토콜 중 하나의 웹 액세스할 수 없는 클라이언트 인증서 인증을 요구하는 서비스. 그러나 Microsoft.Web.Services2.Security.X509 클래스를 사용할 수 있습니다. Microsoft.Web.Services2.Security.X509 클래스에 직접 클라이언트 인증서를 인증서 저장소에 액세스할 수 있는 방법이 있습니다. 이러한 메서드를 사용하는 경우 파일로 인증서를 내보낼 필요가 없습니다.

다음 C# 예제에서는 코드가 로컬 컴퓨터 저장소 SecureMathClient 라는 첫 번째 인증서를 찾는 방법을 보여 줍니다. 그런 다음, 이 코드 예제에서는 인증서를 사용하여 웹 서비스 수학 Add 메서드를 호출하여. 수학 웹 서비스 클라이언트 인증서가 필요합니다.
...
  // TODO: Replace <SecureMathClient> with the name of the client certificate.
  string certName = "<SecureMathClient>";

  // WSE 2.0 method
  X509CertificateStore store =
    X509CertificateStore.LocalMachineStore(X509CertificateStore.MyStore);
  store.OpenRead();
  // Look for the first certificate that is named SecureMathClient.
  // Look in the local machine store.
  X509CertificateCollection col= 
    (X509CertificateCollection)store.FindCertificateBySubjectString(certName);
  X509Certificate cert =null;
  try
  { 

// This sample obtains the first matching certificate from the collection.
    cert = col[0];
  } 
  catch(Exception ex)
  {
    throw new Exception("Certificate not Found!");
  }

  // Create an instance of the Web service proxy.
  math mathservice = new math();
  // TODO: Replace <https://wsserver/securemath/math.asmx> with a valid URL.
  mathservice.Url = @"<https://wsserver/securemath/math.asmx>";
  mathservice.ClientCertificates.Add(cert);

  long lngResult = 0;
  try
  {
    lngResult = mathservice.Add(Int32.Parse(operand1.Text), 
        Int32.Parse(operand2.Text));
    result.Text = lngResult.ToString();
  }
  catch(Exception ex)
  {
    if(ex is WebException)
    {
      WebException we = ex as WebException;
      WebResponse webResponse = we.Response;
      throw new Exception("Exception calling method. " + ex.Message);
    }
  }

참조

System.Security.Cryptography.X509Certificates.X509Certificate 클래스에 대한 자세한 내용은 다음 MSDN) Microsoft 개발자 네트워크 (웹 사이트를 방문하십시오.
http://msdn2.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate(vs.71).aspx
보안이 강화된 웹 사이트에 ASP.NET 웹 응용 프로그램을 사용하여 호출하는 방법에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
817854FIX: ASP.NET 웹 응용 프로그램의 보안이 향상된 웹 사이트로 클라이언트 인증서를 배달할 수 없습니다.

속성

기술 자료: 901183 - 마지막 검토: 2007년 12월 13일 목요일 - 수정: 3.2
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft .NET Framework 1.1?을(를) 다음과 함께 사용했을 때
    • Microsoft Internet Information Services 6.0
    • Microsoft Internet Information Services 5.0
키워드:?
kbmt kbcode kbwebservices kbcertservices kbhowto kbinfo KB901183 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com