보안 업데이트 3141780를 적용한 후 .NET Framework 응용 프로그램에서 SignedXml이 포함된 파일을 처리하는 동안 예외 오류 또는 예기치 않은 오류가 발생합니다

적용 대상
.NET Framework 4.6.1 .NET Framework 4.6.2 .NET Framework 3.5.1

요약​​

Microsoft 보안 공지 MS16-035에 설명된 3141780 보안 업데이트를 설치한 후 .NET Framework 응용 프로그램에서 SignedXml이 포함된 파일을 처리할 때 예외 오류 또는 예기치 않은 오류가 발생할 수 있습니다.

추가 정보

중요이 섹션, 메서드 또는 작업에는 레지스트리를 수정하는 방법에 대한 단계가 포함되어 있습니다. 그러나 레지스트리를 잘못 수정하는 경우 심각한 문제가 발생할 수 있습니다. 따라서 이러한 단계를 신중하게 따라야 합니다. 레지스트리를 변경하기 전에 먼저 백업하는 것이 좋습니다. 그런 다음 문제가 발생할 경우 레지스트리를 복원할 수 있습니다. Windows XP 및 Windows Server 2003에서 레지스트리를 백업, 편집 및 복원하는 방법에 대한 자세한 내용은 다음 문서 번호를 클릭하여 Microsoft 기술 자료를 참조하세요.

322756 Windows에서 레지스트리를 백업 및 복원하는 방법

시나리오 1

시나리오 1 증상

관리형 응용 프로그램이 다음 서명이 있는 오류 예외를 반환합니다.

참고

System.Security.Cryptography.CryptographicException: Unable to resolve Uri [FileOrUrl].

                
예제

System.Security.Cryptography.CryptographicException: URI testfile.xml resolve할 수 없습니다.

시나리오 1 해결 방법

고객은 다음 레지스트리 키를 시스템에 적용할 수 있습니다.

레지스트리 항목

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Security@SignedXmlAllowDetachedSignature=1

. Reg 파일을 다운로드할 수 있습니다.

이 문제를 resolve 하려면 해당 링크를 클릭한 다음 다운로드한 파일을 두 번 클릭하여 레지스트리를 변경합니다.

SignedXml-ExternalReferences.reg (32비트 시스템에서 32비트 프로세스, 64비트 시스템에서 64비트 프로세스)

SignedXml-ExternalReferences.Wow6432.reg (64비트 시스템의 32비트 프로세스)

노트

  • 이 레지스트리 항목은 DWORD 항목이어야 합니다.
  • 이 레지스트리 항목은 다이제스트를 계산하기 위해 확인되는 문서 외부에 있는 리소스를 열거나 다운로드하는 이전 동작을 복원합니다.

경고 이 레지스트리 키를 사용하도록 설정하면 서비스 거부, 분산 리플렉션, 서비스 거부, 정보 공개, 서명 우회 및 원격 코드 실행을 비롯한 보안 취약성이 발생할 수 있습니다.

시나리오 2

시나리오 2 증상

성공을 예상했지만 서명 확인에 실패합니다.

시나리오 2 해결 방법

콘텐츠에 다음 서명 블록이 포함된 경우 제공된 레지스트리 항목을 적용하는 것이 좋습니다.

서명 블록 예제

<문서>

<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">

<SignedInfo>

<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />

<SignatureMethod 알고리즘="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />

<Reference URI="...">

<변환>

<Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116" /></Transforms><DigestMethod algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /><DigestValue>...</DigestValue/Reference<>/SignedInfo><SignatureValue>...<></SignatureValue></Signature> ...

</문서>

레지스트리 항목

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Security\SafeTransformMethods@XmlDsigXPathTransform=http://www.w3.org/TR/1999/REC-xpath-19991116

. Reg 파일을 다운로드할 수 있습니다.

이 문제를 resolve 하려면 해당 링크를 클릭한 다음 다운로드한 파일을 두 번 클릭하여 레지스트리를 변경합니다.

XmlDSigXPathTransform.reg (32비트 시스템의 32비트 프로세스 및 64비트 시스템의 64비트 프로세스)

XmlDSigXPathTransform.Wow6432.reg (64비트 시스템의 32비트 프로세스)

서명 블록에 다음 텍스트가 포함되어 있는 경우 제공된 레지스트리 항목을 적용하는 것이 좋습니다.

서명 블록 예제

<문서>

<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">

<SignedInfo>

<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />

<SignatureMethod 알고리즘="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />

<Reference URI="...">

<변환>

<Transform Algorithm="http://www.w3.org/TR/1999/REC-xslt-19991116" /></Transforms><DigestMethod algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /><DigestValue>...</DigestValue></Reference></SignedInfo><SignatureValue>...</SignatureValue></Signature>...
</문서>

레지스트리 항목

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Security\SafeTransformMethods@XmlDsigXsltTransform=http://www.w3.org/TR/1999/REC-xslt-19991116

. Reg 파일을 다운로드할 수 있습니다.

이 문제를 resolve 하려면 해당 링크를 클릭한 다음 다운로드한 파일을 두 번 클릭하여 레지스트리를 변경합니다.

XmlDSigXsltTransform.reg (32비트 시스템의 32비트 프로세스 및 64비트 시스템의 64비트 프로세스)

XmlDSigXsltTransform.Wow6432.reg (64비트 시스템의 32비트 프로세스)

참고 기본적으로 .NET Framework에서 제공하고 서명된 문서의 입력을 수락하지 않는 XML 서명 변환만 사용하도록 설정됩니다. 입력을 허용하는 변환 또는 사용자 지정 변환을 활성화하려면 해당 변환에 등록된 URI를 이 레지스트리 키 내의 REG_SZ 형식 값의 데이터로 지정해야 합니다. 값의 이름은 처리되지 않으며 컴퓨터 관리자가 선택하는 모든 이름일 수 있습니다.

경고: XPath 및 XSLT 변환을 사용하면 문서 보낸 사람이 계산 비용이 많이 드는 문서를 구성할 수 있습니다. 이로 인해 서비스 거부 상황이 발생할 수 있습니다.