다음을 통해 공유


IOpcDigitalSignatureManager::Sign 메서드(msopc.h)

지정된 인증서 및 IOpcSigningOptions 인터페이스 포인터를 사용하여 서명을 생성하여 패키지에 서명합니다. 결과 서명은 IOpcDigitalSignature 인터페이스 포인터로 표시됩니다.

구문

HRESULT Sign(
  [in]          const CERT_CONTEXT   *certificate,
  [in]          IOpcSigningOptions   *signingOptions,
  [out, retval] IOpcDigitalSignature **digitalSignature
);

매개 변수

[in] certificate

인증서를 포함하는 CERT_CONTEXT 구조체에 대한 포인터입니다.

[in] signingOptions

서명을 생성하는 데 사용되는 IOpcSigningOptions 인터페이스 포인터입니다.

[out, retval] digitalSignature

서명을 나타내는 새 IOpcDigitalSignature 인터페이스 포인터입니다.

반환 값

이 메서드는 HRESULT를 반환합니다. 가능한 값에는 다음 표에 있는 값이 포함되지만, 이에 국한되는 것은 아닙니다.

반환 코드/값 Description
S_OK
메서드가 성공했습니다.
E_POINTER
인증서, signingOptionsdigitalSignature 매개 변수 중 하나 이상이 NULL입니다.
OPC_E_DS_DEFAULT_DIGEST_METHOD_NOT_SET
0x80510047
기본 다이제스트 메서드가 설정되지 않았습니다. 설정하려면 IOpcSigningOptions::SetDefaultDigestMethod를 호출합니다.
OPC_E_DS_DIGEST_VALUE_ERROR
0x8051001A
서명에 대해 참조된 서명 태그의 패키지 구성 요소 또는 요소의 다이제스트 값을 가져올 수 없습니다.
OPC_E_DS_INVALID_OPC_SIGNATURE_TIME_FORMAT
0x80510024
서명의 시간 형식이 유효한 OPC_SIGNATURE_TIME_FORMAT 열거형 값이 아닙니다.
OPC_E_DS_INVALID_RELATIONSHIPS_SIGNING_OPTION
0x80510023
표시된 관계 서명 옵션이 유효한 OPC_RELATIONSHIPS_SIGNING_OPTION 열거형 값이 아닙니다.
OPC_E_DS_SIGNATURE_CORRUPT
0x80510019
패키지의 서명이 제대로 구성되지 않았습니다. 서명 값을 가져올 수 없습니다.
OPC_E_DS_SIGNATURE_METHOD_NOT_SET
0x80510046
서명 메서드가 설정되지 않았습니다. IOpcSigningOptions::SetSignatureMethod를 호출하여 서명 메서드를 설정합니다.
OPC_E_NO_SUCH_PART
0x80510018
지정된 부분이 없습니다.
암호화 오류
암호화 API의 HRESULT 오류 코드입니다.
Windows 웹 서비스 오류
Windows Web Services API의 HRESULT 오류 코드입니다.

설명

이 메서드는 패키징 개체를 사용하여 패키지를 변경합니다. 결과 변경 내용은 패키지 자체가 저장될 때까지 저장되지 않습니다.

서명을 생성하기 위해 이 메서드를 호출하기 전에 IOpcSigningOptions::SetDefaultDigestMethodIOpcSigningOptions::SetSignatureMethod 메서드를 호출합니다.

이 메서드에 필요한 IOpcSigningOptions 인터페이스 포인터를 만들려면 CreateSigningOptions 메서드를 호출합니다 .

중요 이 메서드를 실행하는 동안 패키지가 수정되면 서명 이 실패하거나 일관되지 않은 서명을 생성할 수 있습니다. 패키지의 손상을 방지하려면 API를 사용하여 Sign을 호출하기 전에 패키지를 저장합니다. 패키지를 저장하는 방법에 대한 자세한 내용은 패키지 저장을 참조하세요.
 
이 메서드는 다음과 같은 부분 및 관계를 만들 수 있습니다.
  • 디지털 서명 원본 부분
  • 디지털 서명 원본 관계 유형의 패키지 관계
  • 서명 태그가 포함된 하나의 서명 부분
  • 인증서를 포함하는 하나 이상의 부분
  • 서명 부분을 대상으로 하고 디지털 서명 원본 부분을 원본으로 사용하는 하나의 관계
  • 인증서를 포함하고 다른 서명 부분을 원본으로 사용하는 서명 부분을 대상으로 하는 하나 이상의 관계

서명이 실패하면 패키지에서 패키징 개체로 위의 부분과 관계를 나타낼 수 있습니다. 메서드가 OPC_E_DS_SIGNATURE_METHOD_NOT_SET 또는 OPC_E_DS_DEFAULT_DIGEST_METHOD_NOT_SET 오류 코드를 반환하는 경우 패키지가 변경되지 않았습니다.

Sign이 성공하면 서명된 엔터티에 대한 다이제스트 값이 계산되고 생성된 서명이 서명 태그로 직렬화됩니다. 서명된 가능한 엔터티에는 Signature 요소, 참조, 파트, 관계, 패키지별 및 애플리케이션별 Object 요소가 포함됩니다.

호출자가 IOpcSigningOptions 인터페이스를 사용하여 서명 정보를 설정할 때 패키지 서명에 도입된 오류는 Sign 이 호출될 때까지 노출되지 않을 수 있습니다.

스레드 보안

패키징 개체는 스레드로부터 안전하지 않습니다.

자세한 내용은 패키징 API를 사용한 시작 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 7 [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2008 R2 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 msopc.h

추가 정보

핵심 패키징 인터페이스

디지털 인증서

디지털 서명 개요

패키징 API를 사용하여 시작

IOpcDigitalSignatureManager

개요

패키징 API 프로그래밍 가이드

패키징 API 참조

패키징 API 샘플

디지털 서명 인터페이스 패키징

패키징 인터페이스

참조

패키지 저장