다음을 통해 공유


Peer Channel Custom Authentication

이 샘플에서는 응용 프로그램 제공 피어 인증을 사용하여 다자 간 통신을 제공하는 NetPeerTcpBinding 바인딩을 사용자 지정 인증 모드와 함께 사용하는 방법을 보여 줍니다. 이 샘플은 Getting Started 샘플을 변형한 것입니다. WCF(Windows Communication Foundation)에 대한 개요를 보려면 Getting Started 샘플을 참조하십시오.

이 샘플에서 모든 인스턴스는 자체 호스팅 콘솔 응용 프로그램이므로 클라이언트와 서버의 개념이 없습니다.

다른 전송 바인딩 샘플과 달리 이 샘플에서는 다자 간 통신을 설명할 목적으로 IChat 계약 인터페이스를 사용합니다. 모든 인스턴스는 이 계약을 구현하여 메시지를 수신하고 동일한 계약의 프록시를 만들어 메시로 메시지를 보냅니다. 이 작업은 메시에 대한 이중 채널을 만들어 수행됩니다.

참고

이 샘플의 설치 절차 및 빌드 지침은 이 항목의 끝부분에 나와 있습니다.

피어 채널은 WCF에서 제공되는 P2P(피어 투 피어) 다자간 통신 기술입니다. 피어 채널은 응용 프로그램 개발자에게 안전하고 확장 가능한 메시지 기반 P2P 통신 채널을 제공합니다. 피어 채널을 활용할 수 있는 다자 간 응용 프로그램의 한 가지 대표적인 예로 한 그룹의 사용자가 서버 없이 피어 투 피어 방식으로 서로 채트하는 대화방 같은 공동 작업 응용 프로그램을 들 수 있습니다. 피어 채널은 소비자 및 엔터프라이즈 시나리오에서 모두 P2P 공동 작업, 콘텐츠 배포, 부하 분산 및 분산 처리를 가능하게 합니다.

피어 채널에는 다음과 같은 새로운 개념이 도입되었습니다.

  • 메시는 서로 통신할 수 있고 고유한 메시 ID를 통해 식별되는 피어 노드의 명명된 컬렉션(상호 연결된 그래프)입니다.

    참고

    메시에 있는 활성 노드는 다른 노드가 찾을 수 있도록 메시 이름을 게시합니다. 메시는 다음과 같은 특징을 갖습니다. 즉, 노드가 메시에 참가하고 나오는 때를 자동으로 조정하여 모든 노드가 메시와 최적의 연결 상태를 유지하고 현재 트래픽 패턴에 기반하여 연결이 동적으로 최적화되도록 합니다.

  • 피어 노드는 메시에 있는 끝점입니다. 응용 프로그램에는 서로 다른 메시에 참가하는 여러 개의 피어 노드가 있을 수 있습니다.

  • 피어 확인자는 메시 ID를 메시에 있는 여러 노드의 끝점 주소로 확인합니다. 피어 노드는 이러한 주소를 사용하여 메시에 있는 다른 노드와 연결합니다. 이를 통해 메시지를 메시 전체에 전파할 수 있습니다.

PeerTransportCredentialType은 메시에 있는 피어가 서로 인증하는 방식을 지정합니다. 이 속성은 바인딩 구성이나 NetPeerTcpBinding 개체에서 또는 PeerTransportBindingElement를 사용하여 지정할 수 있습니다. 사용 방법에 따라 Peer 속성에 지정된 적절한 자격 증명을 갖는 ClientCredentialSettings 또는 ServiceCredentialSettings 인스턴스를 채널 팩터리 또는 서비스 호스트의 동작 컬렉션에 추가해야 합니다.

피어 채널은 PeerTransportCredentialType 클래스에서 다음과 같은 인증 모드를 지원합니다.

  1. Password. 피어 채널의 기본 인증 모드입니다. 이 모드에서는 메시에 참가한 모든 노드가 암호를 알고 있음을 증명해야 합니다. 이 과정은 인접한 노드 간에 보안 연결을 설정하고 이 암호를 변환하여 교환함으로써 수행됩니다. Password를 지정한 경우 ClientCredentialSettings.Peer 속성은 유효한 암호를 전달하고 SetSelfCertificate를 사용하여 선택적으로 X509Certificate2 인스턴스를 전달해야 합니다.
  2. Certificate. 이 모드에서는 피어 연결을 설정할 때 응용 프로그램 관련 인증이 수행됩니다. 이 모드가 지정된 경우 응용 프로그램은 채널 팩터리에 추가된 ClientCredentialSettings.Peer.PeerAuthenticationX509Certificate2Validator의 구체적인 구현을 지정해야 합니다.

바인딩은 클라이언트의 구성 파일에 지정되고 바인딩 형식은 다음 샘플에서와 같이 끝점 요소의 binding 특성에 지정됩니다.

<client>
  <!-- chat instance participating in the mesh -->
  <endpoint name="ChatEndpoint"
            address="net.p2p://SecurechatMesh/servicemodelsamples/chat"
            binding="netPeerTcpBinding"
            bindingConfiguration="MyBinding"
            contract="Microsoft.ServiceModel.Samples.IChat">
  </endpoint>
</client>

기본 동작과 함께 NetPeerTcpBinding 바인딩을 사용하는 경우 암호 기반 보안이 사용됩니다. binding 요소는 포트, 수신 IP 주소, 확인자 형식, 최대 메시지 크기, 최대 버퍼 풀 크기, 판독기 할당량, 인증 모드, 메시지 인증 및 시간 제한(닫기, 열기, 보내기 및 받기)을 설정하기 위한 특성을 제공합니다.

참고

이 샘플에서는 Windows Server 2003에서 사용할 수 없는 기본 피어 확인자(PNRP)를 사용하므로 Windows Server 2003에서 이 샘플을 실행하려면 사용자 지정 피어 확인자를 사용해야 합니다. 다음과 같은 사용자 지정 피어 확인자를 사용하는 샘플을 보려면 Peer Channel Chat를 참조하십시오.

<netPeerTcpBinding>
    <binding configurationName="Binding1"> 
        <resolver mode="Custom">
            <customResolver type=
                 "MyAppNameSpace.MyCustomPeerResolver, myApp"/>
        </resolver>
    </binding>
</netPeerTcpBinding>

MyCustomPeerResolver가 포함된 파일은 채트 인스턴스와 함께 컴파일되어야 합니다. 플랫폼이 다른 여러 컴퓨터에서 샘플을 실행하는 경우 해당 컴퓨터는 모두 동일한 확인자를 사용해야 합니다.

이 샘플에서는 또한 수신자 또는 발신자 인스턴스와 연결된 피어 노드를 검색하고 온라인 및 오프라인 이벤트를 등록하는 방법을 보여 줍니다. 온라인 이벤트는 피어 노드가 메시에 있는 적어도 하나의 다른 피어 노드와 연결된 경우 발생하고, 오프라인 이벤트는 피어 노드가 더 이상 메시에 있는 다른 피어 노드와 연결되어 있지 않은 경우 발생합니다.

이 경우 피어 채널은 ServiceModel Metadata Utility Tool (Svcutil.exe)와 통합되지 않습니다.

샘플을 실행하면 클라이언트는 메시지를 보낼 준비가 되었음을 알리는 메시지를 표시합니다. 한 클라이언트가 보낸 메시지는 동일한 메시에 참가한 다른 모든 클라이언트의 콘솔 창에 표시됩니다. 클라이언트를 종료하려면 클라이언트의 콘솔 창에서 Q 키를 누른 다음 Enter 키를 누릅니다.

추적 또는 메시지 로깅을 사용하도록 설정하면 메시지 활동을 보다 자세히 모니터링할 수 있습니다. 다음 절차에서는 추적 및 메시지 로깅을 사용하도록 설정하는 방법을 설명합니다.

참고

이 샘플에서는 현재 인프라에서 throw할 수 있는 모든 예외를 처리하지는 않습니다. 상용/프로덕션 환경에서 이 샘플을 사용할 경우에는 올바른 예외 처리 모범 사례를 따르십시오.

샘플을 설치, 빌드 및 실행하려면

  1. Windows Communication Foundation 샘플의 일회 설치 절차를 수행했는지 확인합니다.

  2. C# 또는 Visual Basic .NET 버전의 솔루션을 빌드하려면 Windows Communication Foundation 샘플 빌드의 지침을 따릅니다.

  3. 단일 컴퓨터 구성에서 샘플을 실행하려면 Windows Communication Foundation 샘플 실행의 지침을 따릅니다.

  4. Windows XP SP2에서 PNRP를 설치하려면(일회 설치)

    1. 제어판에서 프로그램 추가/제거를 두 번 클릭합니다.
    2. 프로그램 추가/제거 대화 상자에서 Windows 구성 요소 추가/제거를 클릭합니다.
    3. Windows 구성 요소 마법사에서 "네트워킹 서비스" 확인란을 선택하고 "자세히"를 클릭합니다.
    4. "피어-투-피어" 확인란을 선택하고 "확인"을 클릭합니다.
    5. Windows 구성 요소 마법사에서 "다음"을 클릭합니다.
    6. 설치가 완료되면 "마침"을 클릭합니다.
    7. 명령 셸 프롬프트에서 net start pnrpsvc 명령을 입력하여 PNRP 서비스를 시작합니다.
  5. 3단계에서 클라이언트와 서비스를 나타내는 경우 이러한 단계는 응용 프로그램의 개별 인스턴스에 적용됩니다.

  6. 이 샘플을 컴퓨터에서 처음 실행하는 경우 Setup.bat를 실행하여 기관을 발급하는 인증서와 두 개의 클라이언트 인증서를 만듭니다. 발급 기관의 기본 이름은 "TrustedPeerChannelIssuer"이고 클라이언트 인증서의 기본 이름은 "peer1" 및 "peer2"입니다. 선택적으로 "setup.bat <peername> <issuername>"과 같이 Setup.bat에 인수를 전달하여 이름을 지정할 수 있습니다. 여기서 <peername>은 클라이언트의 접두사 이름이고 <issuername>은 샘플의 신뢰할 수 있는 발급자 이름입니다. 예를 들어, "setup.bat peer fake_issuer"와 같이 입력하면 "fake_issuer"라는 신뢰할 수 있는 발급자와 "peer1" 및 "peer2"라는 클라이언트 인증서가 생성됩니다. 샘플의 모든 인스턴스를 한 대의 컴퓨터에서 실행하는 경우 7단계를 진행하십시오.

  7. 다중 컴퓨터 설정을 위한 추가 단계: 샘플을 여러 컴퓨터에서 실행하려면 발급자 정보가 모든 피어에서 일치하도록 한 대의 컴퓨터에 있는 인증서 정보를 샘플을 실행하는 다른 모든 컴퓨터로 복사해야 합니다. 이렇게 하려면 Setup.bat를 통해 생성된 신뢰할 수 있는 발급자를 사용하여 만든 클라이언트 인증서를 내보냅니다. 또한 신뢰할 수 있는 발급자(기본 이름을 사용하는 경우 TrustedPeerChannelIssuer.cer)를 샘플을 실행하는 다른 모든 클라이언트 컴퓨터에 복사해야 합니다. 다음 세 단계를 수행합니다.

    1. 신뢰할 수 있는 발급자 전송: 동일한 폴더에서 Setup.bat를 실행하여 생성된 .cer 파일을 클라이언트 컴퓨터로 복사합니다. 파일을 마우스 오른쪽 단추로 클릭하고 인증서 설치를 선택합니다. 다음을 누르고 모든 인증서를 다음 저장소에 저장을 선택합니다. 찾아보기를 누르고 인증서 대상으로 신뢰된 사용자를 선택합니다. 다음마침을 선택하여 인증서 가져오기를 마칩니다.

    2. 클라이언트 인증서 내보내기: 먼저 클라이언트 인증서를 생성하는 데 사용된 컴퓨터에서 Certmgr.msc를 실행합니다. "인증서 - 현재 사용자" -> "개인" -> "인증서"를 선택하여 개인 저장소에서 클라이언트 인증서를 선택합니다. 인증서를 마우스 오른쪽 단추로 클릭하고 "모든 작업" -> "내보내기…"를 선택하여 인증서 내보내기 마법사를 시작합니다. "다음"을 누르고 "예, 개인 키를 내보냅니다."를 선택한 후 "다음"을 누릅니다. 다시 "다음"을 선택하여 .pfx 형식과 기본값을 선택합니다. 인증서 암호를 입력하고 다시 "다음"을 클릭합니다. 마지막으로 경로와 파일 이름을 선택하고 "다음"과 "마침"을 클릭하여 내보내기 프로세스를 완료합니다.

    3. 클라이언트 인증서 가져오기: (b)단계에서 만든 .pfx 파일을 클라이언트 컴퓨터에 복사합니다. 파일을 마우스 오른쪽 단추로 클릭하고 "PFX 설치"를 선택합니다. "다음"을 두 번 누르고 인증서를 내보낼 때 사용한 암호를 입력합니다. "다음"과 "마침"을 눌러 인증서를 개인 저장소에 저장합니다.

      참고

      신뢰할 수 있는 발급자를 만들고 파일 전송을 통해 내보내는 경우 파일이 잘못 배포되면 보안상의 위험이 생길 수 있습니다. 샘플을 실행한 후에는 반드시 샘플 인증서를 지우십시오(8단계).

  8. 응용 프로그램의 인스턴스를 원하는 수만큼 실행합니다. 한 인스턴스에서 보낸 메시지는 다른 인스턴스에서 수신합니다. 각 인스턴스에는 "peer1"이라는 기본 이름이 지정됩니다. 특정 인스턴스를 구별하려면 응용 프로그램의 구성 파일에서 appSettings의 "member" 키 값을 변경하고 동일한 이름으로 클라이언트 인증서를 만듭니다.

  9. 마지막으로 Cleanup.bat를 실행하여 이 샘플에서 만든 인증서를 제거합니다. 기본이 아닌 이름을 사용한 경우에는 6단계에서 사용한 것과 같은 값을 사용하여 "Cleanup.bat <peername> <issuername>"을 실행합니다.

Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.