セキュリティ更新プログラム 3141780を適用した後、.NET Framework アプリケーションで、SignedXml を含むファイルの処理中に例外エラーまたは予期しないエラーが発生します

適用先
.NET Framework 4.6.1 .NET Framework 4.6.2 .NET Framework 3.5.1

概要

3141780セキュリティ更新プログラム (マイクロソフト セキュリティ情報 MS16-035 に記載) のいずれかをインストールした後、.NET Framework アプリケーションで SignedXml を含むファイルの処理中に、例外エラーや予期しないエラーが発生する場合があります。

追加情報

重要: このセクション、方法、またはタスクには、レジストリに変更を加える方法を示す手順が含まれています。 ただし、レジストリを誤って変更すると、深刻な問題が発生する可能性があります。 そのため、この手順は必ず慎重に行ってください。 さらなる保護のため、レジストリは変更する前にバックアップしてください。 こうしておけば、問題が発生した場合にレジストリを復元できます。 レジストリのバックアップ方法および復元方法の詳細を参照するには、以下のサポート技術情報番号をクリックしてください。

322756 Windows でレジストリをバックアップおよび復元する方法

シナリオ 1

シナリオ 1 の現象

マネージド アプリケーションは、次の署名を持つエラー例外を返します。

System.Security.Cryptography.CryptographicException: Uri [FileOrUrl] を解決できません。

                
使用例

System.Security.Cryptography.CryptographicException: Uri testfile.xml を解決できません。

シナリオ 1 の解決方法

お客様は、次のレジストリ キーをシステムに適用できます。

レジストリ エントリ

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

.Reg ファイルをダウンロード可能

この問題を解決するには、適切なリンクをクリックし、ダウンロードしたファイルをダブルクリックしてレジストリを変更します。

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 Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />

<参照 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> ...

</document>

レジストリ エントリ

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

.Reg ファイルをダウンロード可能

この問題を解決するには、適切なリンクをクリックし、ダウンロードしたファイルをダブルクリックしてレジストリを変更します。

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 Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />

<参照 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>...
</document>

レジストリ エントリ

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

.Reg ファイルをダウンロード可能

この問題を解決するには、適切なリンクをクリックし、ダウンロードしたファイルをダブルクリックしてレジストリを変更します。

XmlDSigXsltTransform.reg (32 ビット システムでは 32 ビット プロセス、64 ビット システムでは 64 ビット プロセス)

XmlDSigXsltTransform.Wow6432.reg (64 ビット システム上の 32 ビット プロセス)

注: 既定では、.NET Frameworkによって提供され、署名されたドキュメントからの入力を受け入れないXML署名変換のみが有効になります。 入力受け入れ変換またはカスタム変換を有効にするには、その変換に登録された URI が、このレジストリ キー内のREG_SZ型の値のデータとして指定されている必要があります。 値の名前は処理されず、コンピューター管理者が選択した任意の名前にすることができます。

警告: XPath 変換と XSLT 変換により、ドキュメント送信側は計算コストの高いドキュメントを作成できます。 これにより、サービス拒否の状況が発生する可能性があります。