Share via


ICertRequest::Submit 메서드(certcli.h)

Submit 메서드는 인증서 서비스 서버에 요청을 제출합니다.

결과 처리 상태 CR_DISP_ISSUED 경우 ICertRequest3::GetCertificate 메서드를 호출하여 발급된 인증서를 검색할 수 있습니다.

구문

HRESULT Submit(
  [in]          LONG       Flags,
  [in]          const BSTR strRequest,
  [in]          const BSTR strAttributes,
  [in]          const BSTR strConfig,
  [out, retval] LONG       *pDisposition
);

매개 변수

[in] Flags

요청 형식, 요청 유형 및 요청 암호화 여부를 지정합니다. 다음 형식 특성 플래그 중 하나를 사용하여 요청을 인코딩하는 방법을 지정할 수 있습니다.

의미
CR_IN_BASE64
시작/끝이 없는 유니코드 BASE64 형식입니다.
CR_IN_BASE64HEADER
시작/끝이 있는 유니코드 BASE64 형식입니다.
CR_IN_BINARY
이진 형식입니다.
CR_IN_ENCODEANY
모든 CR_IN_BASE64HEADER, CR_IN_BASE64 또는 CR_IN_BINARY 형식을 사용해 보세요.
 

다음 형식 값 플래그 중 하나를 사용하여 요청 유형을 지정할 수 있습니다.

의미
CR_IN_RETURNCHALLENGE
CA에 제출할 수 있는 챌린지를 반환합니다. 문제는 CMS(CMS) 전체 요청을 통해 인증서 관리 입니다. 이 플래그가 켜져 있으면 FR_PROP_FULLRESPONSE 플래그를 사용하여 GetFullResponseProperty 메서드를 호출하면 키 증명 챌린지가 포함된 CMC 응답이 반환됩니다.
CR_IN_CHALLENGERESPONSE
호출은 챌린지에 대한 응답입니다. RequestId는 strAttributes 매개 변수에 전달되어야 하며 챌린지에 대한 응답은 strRequest 매개 변수에 전달되어야 합니다. 애플리케이션이 암호 해독된 챌린지를 CA에 다시 보내야 하는 경우 이 플래그를 설정해야 합니다. 그런 다음 GetFullResponseProperty 메서드를 호출하여 발급된 최종 엔터티 인증서를 가져올 수 있습니다.
CR_IN_CMC
CMS(인증서 관리) 요청.
CR_IN_FORMATANY
모든 CR_IN_CMC, CR_IN_KEYGEN, CR_IN_PKCS7 또는 CR_IN_PKCS10 형식을 사용해 보세요.
CR_IN_KEYGEN
Keygen 요청(Netscape 형식).
CR_IN_PKCS7
PKCS #7 요청(갱신 또는 등록 에이전트).
CR_IN_PKCS10
PKCS #10 요청.
CR_IN_RPC
DCOM 대신 RPC를 사용하여 메시지를 전송합니다.
CR_IN_FULLRESPONSE
전체 CMC 응답을 반환합니다.
CR_IN_CRLS
현재 인증서 해지 목록을 포함합니다.
CR_IN_MACHINE
키 서비스 컴퓨터의 컨텍스트를 사용합니다.
CR_IN_ROBO
다른 보낸 사람 대신 메시지가 요청되고 있음을 나타냅니다.

CA( 인증 기관 )가 "대신 갱신"되도록 구성되지 않은 경우 CA는 요청을 거부합니다.

CA에서 "대신 갱신"을 사용하도록 설정하는 방법에 대한 자세한 내용은 갱신 전용 모드에 대한 인증서 등록 웹 서비스 구성을 참조하세요.

요청은 갱신 요청이어야 하며 서명 인증서는 요청과 동일한 템플릿을 사용해야 합니다.

또한 다음 조건 중 하나가 true인 경우에만 요청이 성공합니다.

  • 서명 인증서는 동일한 CA에서 발급해야 합니다.
  • 서명 인증서의 SAN2 확장에는 주체의 UPN이 있습니다.
  • 서명 인증서의 주체 이름에 주체의 FQDN_1779 있습니다.
Windows Server 2008 및 Windows Server 2003: 이 플래그는 지원되지 않습니다.
CR_IN_CLIENTIDNONE
클라이언트를 식별하는 요청 데이터에는 포함하지 마세요.

Windows Server 2008 및 Windows Server 2003: 이 플래그는 지원되지 않습니다.

CR_IN_CONNECTONLY
서버와의 DCOM 연결이 설정되었지만 요청이 제출되지 않도록 지정합니다.

[in] strRequest

인증서 요청을 포함하는 문자열에 대한 포인터입니다. flags에서 CR_IN_BASE64 또는 CR_IN_BASE64HEADER 지정한 경우 strRequest는 유니코드 문자열이어야 합니다.

[in] strAttributes

요청에 대한 선택적 추가 특성 이 포함된 문자열에 대한 포인터입니다. 각 특성은 이름-값 문자열 쌍입니다. 콜론 문자는 이름과 값을 구분하고 줄 바꿈 문자는 여러 이름-값 쌍을 구분합니다. 예를 들면 다음과 같습니다.

C++ "AttributeName1:AttributeValue1\nAttributeName2:AttributeValue2"
VB "AttributeName1:AttributeValue1" & vbNewLine & "AttributeName2:AttributeValue2"
Certificate Services 서버는 특성 이름을 구문 분석할 때 공백, 하이픈(빼기 기호) 및 대/소문자를 무시합니다. 예를 들어 "AttributeName1", "Attribute Name1" 및 "Attribute-name1"은 모두 동일합니다. 특성 값의 경우 Certificate Services 서버는 선행 공백과 후행 공백을 무시합니다.

[in] strConfig

인증서 서비스 서버에 대한 유효한 구성 문자열을 나타냅니다. 이 문자열은 등록 서버의 HTTPS URL이거나 ComputerNameCAName\ 형식일 수 있습니다. 여기서 ComputerName은 서버의 네트워크 이름이고 CAName은 인증서 서비스 설정 중에 입력한 대로 인증 기관의 일반 이름입니다. 구성 문자열 이름에 대한 자세한 내용은 ICertConfig를 참조하세요.

Windows Server 2008, Windows Vista, Windows Server 2003 및 Windows XP: HTTPS URL은 입력으로 지원되지 않습니다.

[out, retval] pDisposition

요청의 처리 값에 대한 포인터입니다.

반환 값

C++

메서드가 성공하면 메서드는 S_OK 반환합니다.

이 함수가 성공적으로 완료되면 *pDisposition 이 다음 표의 값 중 하나로 설정됩니다.

메서드가 실패하면 오류를 나타내는 HRESULT 값을 반환합니다. 일반적인 오류 코드 목록은 일반 HRESULT 값을 참조하세요.

VB

반환 값은 요청의 처리를 지정합니다. 처리는 다음 값 중 하나입니다.
반환 코드 설명
CR_DISP_DENIED
요청이 거부됨
CR_DISP_ERROR
요청 실패
CR_DISP_INCOMPLETE
요청이 완료되지 않았습니다.
CR_DISP_ISSUED
인증서 발행됨
CR_DISP_ISSUED_OUT_OF_BAND
별도로 발급된 인증서
CR_DISP_UNDER_SUBMISSION
제출에서 수행된 요청

설명

파일에서 BASE64 형식 요청을 읽는 경우 이 메서드를 사용하여 요청을 제출하기 전에 파일이 유니코드에 있는지 확인하거나 ASCII에서 유니코드로 변환합니다.

예제

    //  The pointer to the interface object.
    ICertRequest * pCertRequest = NULL;

    //  The variable for the computer\CAName.
    BSTR         bstrCA = NULL;

    //  The variable for the request.
    BSTR         bstrRequest = NULL;

    //  The variable for the attributes.
    BSTR         bstrAttribs = NULL;

    //  The variable for the disposition code.
    long        nDisp;

    HRESULT     hr;

    //  Initialize COM.
    hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);

    //  Check status.
    if (FAILED(hr))
    {
        printf("Failed CoInitializeEx [%x]\n", hr);
        goto error;
    }

    //  Instantiate the CertConfig object.
    hr = CoCreateInstance(CLSID_CCertRequest,
                          NULL,
                          CLSCTX_INPROC_SERVER,
                          IID_ICertRequest,
                          (void **)&pCertRequest);
    if (FAILED(hr))
    {
        printf("Failed CoCreateInstance pCertRequest [%x]\n", hr);
        goto error;
    }

    //  Specify the certification authority.
    //  Note: In C++, produce one backslash (\) by using two.
    bstrCA = SysAllocString(L"server01\\myCAName");

    //  Create the request (not shown), and assign it to bstrRequest,
    //  for example, use ICEnroll::createPKCS10.

    //  Generate the attributes. In this case, no attributes
    //  are specified.
    bstrAttribs = SysAllocString(L"");
    
    //  Submit the request.
    hr = pCertRequest->Submit(CR_IN_BASE64 | CR_IN_PKCS10, 
                              bstrRequest,
                              bstrAttribs,
                              bstrCA, 
                              &nDisp );
    if (FAILED(hr))
    {
        printf("Failed Submit [%x]\n", hr);
        goto error;
    }
    else
    {
        //  Use the disposition value as needed.
    }

    //  Done processing.

error:

    //  Free BSTR values.
    if (NULL != bstrCA)
        SysFreeString(bstrCA);

    if (NULL != bstrRequest)
        SysFreeString(bstrRequest);

    if (NULL != bstrAttribs)
        SysFreeString(bstrAttribs);

    //  Clean up object resources.
    if (NULL != pCertRequest)
        pCertRequest->Release();

    //  Free COM resources.
    CoUninitialize();

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 certcli.h(Certsrv.h 포함)
라이브러리 Certidl.lib
DLL Certcli.dll

추가 정보

CCertRequest

ICEnroll::createPKCS10

ICertConfig

ICertRequest

ICertRequest2

ICertRequest3