2017-08-04 1 views
0

特定のXMLドキュメントが改ざんされていないことを検証しようとしています。System.Security.Cryptography.Xml.SignedXmlで.NetのCheckSignatureを使用すると、テストサーバーでは失敗しますが、開発マシンではありません。

私の開発マシンではこれは問題なく動作しますが、テストサーバーでは常に失敗します。開発マシンは、Windows 10で、テストサーバーでは、私はSignedXMLのデバッグログを作成するためのWindows Server 2008 R2およびWindows Server 2012

管理しているが、これは、それは次のようになります。

開発:

System.Security.Cryptography.Xml.SignedXml Information: 1 : [SignedXml#03d410d5, BeginCheckSignatureFormat] Checking signature format using format validator "[System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a] 
System.Security.Cryptography.Xml.SignedXml.DefaultSignatureFormatValidator". 
System.Security.Cryptography.Xml.SignedXml Information: 6 : [SignedXml#03d410d5, FormatValidationResult] Signature format validation was successful. 
System.Security.Cryptography.Xml.SignedXml Information: 1 : [SignedXml#03d410d5, BeginCheckSignatureFormat] Checking signature format using format validator "[System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a] 
System.Security.Cryptography.Xml.SignedXml.DefaultSignatureFormatValidator". 
System.Security.Cryptography.Xml.SignedXml Information: 6 : [SignedXml#03d410d5, FormatValidationResult] Signature format validation was successful. 
System.Security.Cryptography.Xml.SignedXml Information: 2 : [SignedXml#03d410d5, BeginCheckSignedInfo] Checking signature on SignedInfo with id "(null)". 
System.Security.Cryptography.Xml.SignedXml Information: 7 : [SignedXml#03d410d5, NamespacePropagation] Propagating namespace xmlns="<namespace here>". 

など。

System.Security.Cryptography.Xml.SignedXml Information: 1 : [SignedXml#00e65efe, BeginCheckSignatureFormat] Checking signature format using format validator "[System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a] 
System.Security.Cryptography.Xml.SignedXml.DefaultSignatureFormatValidator". 
System.Security.Cryptography.Xml.SignedXml Information: 6 : [SignedXml#00e65efe, FormatValidationResult] Signature format validation was successful. 
System.Security.Cryptography.Xml.SignedXml Information: 1 : [SignedXml#00e65efe, BeginCheckSignatureFormat] Checking signature format using format validator "[System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a] 
System.Security.Cryptography.Xml.SignedXml.DefaultSignatureFormatValidator". 
System.Security.Cryptography.Xml.SignedXml Information: 6 : [SignedXml#00e65efe, FormatValidationResult] Signature format validation was successful. 
System.Security.Cryptography.Xml.SignedXml Information: 2 : [SignedXml#00e65efe, BeginCheckSignedInfo] Checking signature on SignedInfo with id "(null)". 

しかし、それはただそこで終了:それはほとんど同じを開始し、テストサーバーで

。情報なし:7が記録され、関数はfalseを返します。

テストサーバーには、少なくとも.Net 4.5.2がインストールされているため、SHA-256署名に問題がないと推定されています。

私はここで何が欠けていますか?

+0

どのように失敗しますか? falseを返すか、例外をスローしますか? 'CheckSignature'の呼び出しでコードはどのように見えますか?具体的には、証明書の有効性をチェックしますか? SHA-256が利用できない場合、例外が発生します。 –

+0

@AndersAbelただfalseを返します。私は週末にそれを把握することができた、私の答えを以下に掲載するだろう。 – Drak

答えて

1

私はそれを理解しました。

明らかに、私が入手していたXML(Azure ADの連邦データ)は、.NET 4.5.2では動作しないが4.6.2で動作する暗号方式を使用して署名されています。

今朝、テストサーバーの1つを.Net 4.6.2にアップデートした後、CheckSignatureは実際にtrueを返します。

関連する問題