방법: InfoPath 2003 개체 모델을 사용하여 디지털 서명 작업
InfoPath 2003 호환 개체 모델에서는 디지털 서명 작업을 프로그래밍 방식으로 실행할 수 있는 기능을 제공합니다.
디지털 서명 기능
InfoPath의 디지털 서명 기능을 사용하면 다음을 수행할 수 있습니다.
전체 양식에 대해 서명하거나 양식의 특정 데이터 집합에 대해 별도로 서명할 수 있습니다.
서명할 수 있는 각 데이터 집합에 대해 단일 서명을 허용할지 아니면 복수 서명을 허용할지와 이러한 서명 간의 관계를 지정합니다. 예를 들어 한 문서에 여러 사람이 서명(연서)하는지 아니면 이전의 모든 서명에 각 새 서명을 추가(연대 서명)하는지 등을 지정할 수 있습니다.
양식에 서명할 때 양식 사용자에게 표시되는 메시지를 지정합니다.
문서에 서명을 삽입하고 각 서명을 확인합니다.
보안이 강화됨에 따라 각 서명에 추가된 확인할 수 있으며 거부할 수 없는 정보를 표시합니다. 각 서명자에게 표시되는 대로 양식의 보기를 포함하는 이 추가 정보는 서명의 일부이며 서명을 무효화하지 않으면 제거할 수 없습니다. 양식에서 서명을 클릭하면 이 데이터를 회수하여 디지털 서명 확인 대화 상자를 표시할 수 있습니다.
디지털 서명 작업을 위해 개체 모델을 활용합니다. 즉, 디지털 서명 개체 모델을 통해 완전히 신뢰할 수 있는 양식의 서명 블록에 사용자 지정 정보를 추가합니다.
디지털 서명 개체 모델 개요
이벤트
디지털 서명 개체 모델에서는 다음과 같은 이벤트를 제공합니다.
이름 |
설명 |
---|---|
서명 가능한 데이터 집합을 서명하도록 선택한 후에 발생합니다. 이 이벤트를 사용하여 디지털 서명에 추가 데이터를 추가할 수 있습니다. 예를 들어 신뢰할 수 있는 타임스탬프 서버로부터 데이터를 추가하거나 트랜잭션의 서버 쪽 연대 서명을 추가할 수 있습니다. 또한 현재 사용자가 특정 그룹의 구성원이 아닌 경우 이 이벤트를 사용하여 서명하지 못하도록 막을 수 있습니다. |
OnSign 이벤트는 다음 속성을 제공하는 SignEventObject 개체에 대한 참조를 반환합니다.
이름 |
설명 |
---|---|
OnSign 이벤트의 반환 상태를 나타내는 Boolean 값을 가져오거나 설정합니다. |
|
OnSign 이벤트를 트리거한 서명한 데이터 블록을 가져옵니다. |
|
OnSign 이벤트에 연결된 XDocument 개체에 대한 참조를 가져옵니다. |
컬렉션 및 개체
디지털 서명 개체 모델에서는 다음과 같은 컬렉션을 제공합니다.
이름 |
설명 |
---|---|
양식 정의 파일(.xsf)에 정의된 대로 양식 서식 파일의 SignedDataBlockObject 개체에 대한 모음입니다. SignedDataBlocksCollection 컬렉션은 양식에 연결된 SignedDataBlockObjects 개체에 액세스하는 데 사용할 수 있는 속성을 구현합니다. XDocument 개체의 SignedDataBlocks 속성을 통해 SignedDataBlocks 컬렉션에 액세스할 수 있습니다. |
|
양식의 각 SignedDataBlockObject에 대한 SignatureObject 개체의 모음을 포함합니다. SignaturesCollection 컬렉션은 양식의 연결 SignatureObject 개체에 액세스하여 서명을 만드는 데 사용될 수 있는 속성과 메서드를 구현합니다. SignedDataBlockObject 개체를 통해 액세스할 수 있습니다. SignaturesCollection 컬렉션의 Create 메서드를 사용하는 경우 SignatureObject 개체에서 Sign 메서드를 호출할 때까지 서명이 작성되지 않습니다. 이러한 메서드는 완전히 신뢰할 수 있는 양식 서식 파일의 OnSign 이벤트 처리기에서만 호출할 수 있습니다. |
디지털 서명 개체 모델에서는 다음과 같은 개체를 제공합니다.
이름 |
설명 |
---|---|
양식의 서명 가능한 데이터 집합을 나타냅니다. SignedDataBlock 개체는 서명 가능한 데이터 집합과 프로그래밍 방식으로 상호 작용하는 데 사용할 수 있는 여러 속성과 메서드 하나를 제공합니다. |
|
양식에 추가된 디지털 서명이나 양식의 서명 가능한 데이터 집합을 나타냅니다. SignatureObject 컬렉션은 디지털 서명에 대한 정보를 가져오는 데 사용할 수 있는 속성 및 XML 디지털 서명 블록을 작성하고 암호화 해시 값을 계산하는 데 필요한 Sign 메서드를 구현합니다. |
|
서명을 만드는 데 사용된 X.509 디지털 인증서를 나타냅니다. |
프로그래밍 방식으로 디지털 서명 작업
InfoPath 2003 호환 개체 모델에서는 프로그래밍 방식으로 디지털 서명과 상호 작용하는 데 사용할 수 있는 멤버를 제공합니다. 특히 완전히 신뢰할 수 있는 양식은 커밋되기 전에 다음과 같은 순서로 서명 블록에 사용자 지정 정보를 추가할 수 있습니다.
사용자가 양식에 디지털 서명을 추가하도록 선택합니다.
디지털 서명 마법사의 첫 번째 패널이 표시됩니다.
SignedDataBlockObject 개체에 의해 나타나는 선택한 데이터에 대한 OnSign 이벤트가 발생하고 SignedDataBlockObject의 Sign 메서드 및 SignaturesCollection 컬렉션의 Create 메서드가 실행됩니다.
선택적 사용자 지정 작업이 실행됩니다.
SignatureObject의 Sign 메서드가 실행됩니다.
서명할 인증서를 선택하고 설명을 입력할 수 있도록 마법사의 두 번째 창과 세 번째 창이 표시됩니다.
거부할 수 없는 정보가 표시됩니다. 이 내용은 나중에 디지털 서명 확인 대화 상자에서 볼 수 있습니다.
서명 단추를 클릭하면 양식의 서명 모음에 서명이 추가됩니다.
다음 예제에서는 서명 대화 상자를 호출하고, 신뢰할 수 있는 타임스탬프 서비스에서 가져온 타임스탬프 값으로 서명에 연대 서명합니다.
[InfoPathEventHandler(EventType=InfoPathEventType.OnSign)]
public void OnSign(SignEvent e)
{
Signature signature = e.SignedDataBlock.Signatures.Create();
// Invoke the Sign dialog box to sign the data block.
signature.Sign();
// Countersign the signature with a trusted timestamp
// Get the XML node storing the signature block
IXMLDOMNode oNodeSig = signature.SignatureBlockXmlNode;
IXMLDOMNode oNodeSigValue = oNodeSig.selectSingleNode(".//*[local-name(.)='signatureValue']");
// Get timestamp from a trusted timestamp service (fictitious).
MyTrustedTimeStampService s = new MyTrustedTimeStampService();
string strVerifiedTimeStamp = s.AddTimeStamp(oNodeSigValue.text);
//Add the value returned from the timestamp service to the
//unsigned part of the signature block
IXMLDOMNode oNodeObj = oNodeSig.selectSingleNode(".//*[local-name(.)='Object']");
IXMLDOMNode oNode = oNodeObj.cloneNode(false);
oNode.text = strVerifiedTimeStamp;
oNodeObj.parentNode.appendChild(oNode);
e.ReturnStatus = true;
}