EMDI는 지금도 개발중

C# : SignedXml을 이용한 ds:Signature만드는 방법 본문

언어/C#

C# : SignedXml을 이용한 ds:Signature만드는 방법

EMDI 2020. 3. 27. 15:16

1. signedXml의 설명

ds:Signature을 만드려면 우선 signedXml 클래스를 참조해야합니다.

Namespace:System.Security.Cryptography.Xml

Assembly:System.Security.dll

만약 생성자가 계속 생성되지 않는다면 위의 어셈블리와 네임스페이스를 적용했는지 확인해주세요.

 

 

SignedXml Class (System.Security.Cryptography.Xml)

 

Provides a wrapper on a core XML signature object to facilitate creating XML signatures.

 

docs.microsoft.com

 

2. 예제코드 참고

<Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">  
    <SignedInfo>  
      <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>  
      <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>  
      <Reference URI="">  
        <Transforms>  
          <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>  
        </Transforms>  
        <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>  
        <DigestValue>Base64EncodedValue==</DigestValue>  
      </Reference>  
    </SignedInfo>  
    <SignatureValue>AnotherBase64EncodedValue===</SignatureValue>  
</Signature>

하지만 여기서 우리가 원하는것은 <Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">

이렇게 나오는것이 아닌 <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 이렇게 나오길 원합니다.

근데 다른 블로그분이 정리한 내용을 읽어보니 서명작업은 대상 데이터를 입력으로 삼는 것이지 대상 데이터를 서명한 것을 포함한 그걸 또 서명하는 것이 아니기에 XML 데이터를 서명하는 경우 대상 XML 데이터를 정규화한 후 그것을 서명해서 덧붙이는 것이라고 합니다. 결론은 대상 XML 데이터만 바꾸지 않으면 서명으로 포함되는 정보 <Signature />는 적법한 XML이기만 하면 된다고 합니다.

 

3. Xml표현식으로 변경

XmlElement xmlDigitalSignature = signedXml.GetXml(); 
xmlDigitalSignature.Prefix = "ds"; 

 

4. 참고링크

 

.NET Framework: 541. SignedXml을 이용한 ds:Signature만드는 방법

.NET Framework: 541. SignedXml을 이용한 ds:Signature만드는 방법 [링크 복사], [링크+제목 복사] 조회: 7349 글쓴 사람 홈페이지 첨부 파일 부모글 보이기/감추기 SignedXml을 이용한 ds:Signature만드는 방법 다음과 같은 질문이 있군요. SignedXml을 이용한 ds:Signature만드는 방법좀 알려주세요. ; https://social.msdn.microsoft.com/Forums/ko-KR/50

www.sysnet.pe.kr

Comments