다음을 통해 공유


RPC_SECURITY_QOS 구조체(rpcdce.h)

RPC_SECURITY_QOS 구조는 바인딩 핸들에서 서비스 품질 설정을 정의합니다. Windows 버전의 버전 가용성에 대한 설명 을 참조하세요.

구문

typedef struct _RPC_SECURITY_QOS {
  unsigned long Version;
  unsigned long Capabilities;
  unsigned long IdentityTracking;
  unsigned long ImpersonationType;
} RPC_SECURITY_QOS, *PRPC_SECURITY_QOS;

멤버

Version

사용 중인 RPC_SECURITY_QOS 구조체의 버전입니다. 이 항목에서는 RPC_SECURITY_QOS 구조의 버전 1에 대해 설명합니다. 다른 버전은 RPC_SECURITY_QOS_V2, RPC_SECURITY_QOS_V3, RPC_SECURITY_QOS_V4RPC_SECURITY_QOS_V5 참조하세요.

Capabilities

애플리케이션에 제공되는 보안 서비스입니다. 기능은 비트 OR 연산자를 사용하여 결합할 수 있는 플래그 집합입니다.

의미
RPC_C_QOS_CAPABILITIES_DEFAULT
공급자별 기능이 필요하지 않은 경우에 사용됩니다.
RPC_C_QOS_CAPABILITIES_MUTUAL_AUTH
이 플래그를 지정하면 RPC 런타임이 보안 공급자로부터 상호 인증을 요청합니다. 일부 보안 공급자는 상호 인증을 지원하지 않습니다. 보안 공급자가 상호 인증을 지원하지 않거나 서버 ID를 설정할 수 없는 경우 이러한 서버에 대한 원격 프로시저 호출이 오류 RPC_S_SEC_PKG_ERROR 실패합니다.
참고 RPC는 SSP를 사용하여 성공적으로 협상된 보안 옵션을 나타냅니다. RPC는 SSP(보안 서비스 공급자)가 옵션을 협상할 수 없다고 보고하는 호출에 실패합니다. 그러나 일부 보안 공급자는 옵션이 성공적으로 협상되지 않은 경우에도 옵션의 성공적인 협상을 보고하는 것으로 알려져 있습니다. 예를 들어 NTLM은 상호 인증을 지원하지 않더라도 이전 버전과의 호환성 이유로 상호 인증의 성공적인 협상을 보고합니다. 보안 옵션과 관련하여 해당 동작을 확인하는 데 사용되는 특정 SSP를 확인합니다.
 
RPC_C_QOS_CAPABILITIES_MAKE_FULLSIC
현재 구현되지 않습니다.
RPC_C_QOS_CAPABILITIES_ANY_AUTHORITY
CA(인증 기관)가 서버의 신뢰할 수 있는 CA 목록에 없는 경우에도 클라이언트의 자격 증명을 수락합니다. 이 상수는 SCHANNEL SSP에서만 사용됩니다.
RPC_C_QOS_CAPABILITIES_IGNORE_DELEGATE_FAILURE
지정된 경우 이 플래그는 클라이언트의 RPC 런타임에 위임을 지원하는 보안 컨텍스트를 설정하는 오류를 무시하도록 지시합니다. 일반적으로 클라이언트가 위임을 요청하고 보안 시스템이 위임을 지원하는 보안 컨텍스트를 설정할 수 없는 경우 오류 RPC_S_SEC_PKG_ERROR 반환됩니다. 이 플래그를 지정하면 오류가 반환되지 않습니다.
참고 Windows XP 및 이전 클라이언트 버전에서 지원되지 않으며 Windows 2000 및 이전 서버 버전에서 지원되지 않습니다.
 
RPC_C_QOS_CAPABILITIES_LOCAL_MA_HINT
이 플래그는 RPC에 서버가 RPC를 호출하는 컴퓨터의 로컬임을 지정합니다. 이 경우 RPC는 엔드포인트 매퍼에게 ServerPrincName 또는 Sid 멤버에 지정된 보안 주체에 의해 등록된 엔드포인트만 선택하도록 지시합니다(이러한 멤버는 RPC_SECURITY_QOS_V3, RPC_SECURITY_QOS_V4RPC_SECURITY_QOS_V5 만 사용할 수 있음). 자세한 내용은 설명 부분을 참조하십시오.
참고 Windows XP 및 이전 클라이언트 버전에서 지원되지 않으며 Windows 2000 및 이전 서버 버전에서 지원되지 않습니다.
 
RPC_C_QOS_CAPABILITIES_SCHANNEL_FULL_AUTH_IDENTITY
설정된 경우 RPC 런타임은 SChannel SSP를 사용하여 CSP(암호화 서비스 공급자)의 PIN 프롬프트 대화 상자를 표시하지 않고 스마트 카드 기반 인증을 수행합니다.

RpcBindingSetAuthInfoEx 호출에서 AuthIdentity 매개 변수는 멤버에 다음이 포함된 SEC_WINNT_AUTH_IDENTITY 구조체여야 합니다.

  • 사용자는SCHANNEL_CRED 구조체에 대한 포인터여야 합니다.
  • UserLength 는 0이어야 합니다.
  • 도메인 은 NULL이어야 합니다.
  • DomainLength 는 0이어야 합니다.
  • 암호 는 인증서 PIN 또는 NULL일 수 있습니다. 암호가 PIN인 경우 PasswordLength는 PIN에 대한 올바른 길이여야 하고 암호가 NULL인 경우 PasswordLength는 0이어야 합니다.
RPC_C_QOS_CAPABILITIES_SCHANNEL_FULL_AUTH_IDENTITY 플래그가 SChannel 이외의 SSP에 사용되거나 SEC_WINNT_AUTH_IDENTITY 멤버가 위의 를 준수하지 않는 경우 RpcBindingSetAuthInfoEx에서 RPC_S_INVALID_ARG 반환됩니다.

IdentityTracking

컨텍스트 추적 모드를 설정합니다. 다음 표에 표시된 값 중 하나로 설정해야 합니다.

의미
RPC_C_QOS_IDENTITY_STATIC
보안 컨텍스트는 한 번만 만들어지고 클라이언트 쪽에서 변경하더라도 전체 통신 중에 수정되지 않습니다. RPC_SECURITY_QOS 지정되지 않은 경우 기본 동작입니다.
RPC_C_QOS_IDENTITY_DYNAMIC
컨텍스트는 클라이언트 토큰의 ModifiedId가 변경될 때마다 수정됩니다. 모든 프로토콜은 ModifiedId를 사용합니다(참고 참조).

Windows 2000: 모든 원격 프로토콜( ncalrpc 이외의 모든 프로토콜)은 LogonId라고도 하는 AuthenticationID를 사용하여 클라이언트 ID의 변경 내용을 추적합니다. ncalrpc 프로토콜은 ModifiedId를 사용합니다.

ImpersonationType

서버 프로세스가 클라이언트를 가장할 수 있는 수준입니다.

의미
RPC_C_IMP_LEVEL_DEFAULT
기본 가장 수준을 사용합니다.
RPC_C_IMP_LEVEL_ANONYMOUS
클라이언트는 서버에 식별 정보를 제공하지 않습니다. 서버는 클라이언트를 가장하거나 클라이언트를 식별할 수 없습니다. 많은 서버가 이 가장 형식의 호출을 거부합니다.
참고 일부 보안 공급자는 이 가장 유형을 RPC_C_IMP_LEVEL_IMPERSONATE 동일한 것으로 간주할 수 있습니다. Windows 보안 공급자에서 이 작업은 ncalrpc 이외의 프로토콜 시퀀스와 함께 사용하는 경우에만 RPC_C_AUTHN_WINNT 수행됩니다. 또한 RPC_C_AUTHN_GSS_NEGOTIATE, RPC_C_AUTHN_GSS_SCHANNEL 및 RPC_C_AUTHN_GSS_KERBEROS 의해 수행됩니다.
 
RPC_C_IMP_LEVEL_IDENTIFY
서버는 클라이언트의 ID를 가져오고 클라이언트를 가장하여 ACL(Access Control List) 검사를 수행할 수 있지만 클라이언트를 가장할 수는 없습니다. 자세한 내용은 가장 수준을 참조하세요.
참고 일부 보안 공급자는 이 가장 유형을 RPC_C_IMP_LEVEL_IMPERSONATE 동일한 것으로 간주할 수 있습니다. Windows 보안 공급자에서 이 작업은 ncalrpc 이외의 프로토콜 시퀀스와 함께 사용하는 경우에만 RPC_C_AUTHN_WINNT 수행됩니다. 또한 RPC_C_AUTHN_GSS_NEGOTIATE, RPC_C_AUTHN_GSS_SCHANNEL 및 RPC_C_AUTHN_GSS_KERBEROS 의해 수행됩니다.
 
RPC_C_IMP_LEVEL_IMPERSONATE
서버는 로컬 시스템에서 클라이언트의 보안 컨텍스트를 가장할 수 있지만 원격 시스템에서는 가장할 수 없습니다.
RPC_C_IMP_LEVEL_DELEGATE
서버가 클라이언트의 보안 컨텍스트를 가장하여 클라이언트 역할을 대신 수행할 수 있으며, 또한 서버는 클라이언트를 대신하여 작업하는 동안 다른 서버에 대한 발신 호출을 수행할 수 있습니다. 서버는 다른 컴퓨터에서 클라이언트의 보안 컨텍스트를 사용하여 로컬 및 원격 리소스에 클라이언트로 액세스할 수 있습니다.

설명

다음 목록은 다양한 Windows 운영 체제에서 QOS 버전의 가용성을 정의합니다.

  • 버전 1: Windows 2000 이상.
  • 버전 2: WINDOWS XP SP1(서비스 팩 1) 이상
  • 버전 3: Windows Server 2003 이상.
  • 버전 4: Windows Vista 이상.
  • 버전 5: Windows 8 이상.
Windows 버전도 하위 버전을 지원합니다. 예를 들어 Windows Server 2003은 버전 3을 지원하지만 버전 1과 2도 지원합니다.

클라이언트 쪽 보안 함수 RpcBindingInqAuthInfoExRpcBindingSetAuthInfoRPC_SECURITY_QOS 구조를 사용하여 바인딩 핸들에 대한 서비스 품질을 문의하거나 설정합니다.

RPC는 RPC_C_QOS_CAPABILITIES_LOCAL_MA_HINT 힌트를 지원합니다. 이 힌트는 동적 엔드포인트 및 상호 인증을 사용하는 경우에만 사용됩니다. 또한 ncadg_ 프로토콜 시퀀스에 대해 지원되지 않습니다. 이 플래그가 ncadg_ 프로토콜 시퀀스에 사용되거나 상호 인증을 사용하지 않고 사용되는 경우 RpcBindingSetAuthInfoEx 함수 호출에서 RPC_S_INVALID_ARG 반환됩니다. 이 플래그는 서비스 거부 공격을 방지하도록 설계되었습니다. 이 플래그를 사용하면 RPC 런타임이 ServerPrincName 또는 Sid 멤버에 지정된 보안 주체에 의해 등록된 엔드포인트에 대해서만 엔드포인트 매퍼에 요청합니다. 이렇게 하면 로컬 컴퓨터의 공격자가 RPC 클라이언트를 속여 엔드포인트 매퍼에 등록된 스푸핑 엔드포인트에 연결하지 못하게 합니다. 공격은 로컬 전용이므로(예: 많은 사용자가 있는 터미널 서버 컴퓨터에서) 플래그는 로컬로 수행된 RPC 호출에 대해서만 작동합니다.

참고 Kerberos와 같은 일부 보안 공급자는 위임-가장 유형을 지원합니다. 위임-가장 유형을 지원하는 Windows 버전에서 클라이언트가 위임을 요청했지만 보안 공급자가 위임을 제공할 수 없는 경우 RPC_C_QOS_CAPABILITIES_IGNORE_DELEGATE_FAILURE 플래그를 지정하지 않으면 PRC_S_SEC_PKG_ERROR 호출이 실패합니다.
 

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
머리글 rpcdce.h(Rpc.h 포함)

추가 정보

RPC_SECURITY_QOS_V2

RPC_SECURITY_QOS_V3

RPC_SECURITY_QOS_V4

RPC_SECURITY_QOS_V5

RpcBindingInqAuthInfoEx

RpcBindingSetAuthInfoEx