0

証明書によって署名された ADFS から SAML2 トークンを生成しています。今、同じ証明書を使用して、その署名を検証しようとしています。

X509Certificate2 cert = LoadCert();
XmlDocument token = LoadXmlToken(); //SAML2 token
XmlElement signature = GetSignatureElement(token);

SignedXml signedXml = new SignedXml(token);
signedXml.LoadXml(signature);
bool result1 = signedXml.CheckSignature();            //true
bool result2 = signedXml.CheckSignature(cert, false); //false

CheckSignature() は、トークンに含まれる公開鍵に対して署名を検証します。CheckSignature(cert, [true/false]) は、証明書の秘密鍵に対して署名を検証します。

一方が機能し、他方が機能しないというのはどうしてでしょうか?

4

3 に答える 3

1

signedXml.CheckSignature() メソッドは、独自の署名内に含まれる証明書に対して xml 署名の完全性を評価します。

メソッド SignedXml.CheckSignature(X509Certificate2, Boolean) は、最初のパラメーターとして渡された証明書に対して xml 署名の整合性を評価し、オプションで 2 番目のパラメーターが false の場合は、最初のパラメーターの証明書の有効性もチェックします。

間違った証明書を指定しているため、おそらく 2 番目の方法は false を返します。署名を実行する証明書ではないか、その状態が取り消されているか期限切れであるか、信頼されていない認証局によって発行されています。

于 2014-03-14T21:19:31.980 に答える
1

証明書チェックを使用する場合、checksignature メソッドのために送信ファイアウォールで IP アドレスおよび/または URL を有効にする必要がありました。この場合、ルート CA およびサブ CA の Web サイトと通信しようとしました。ファイアウォールが閉じられているため、この方法は失敗しましたが、アクセスされている URL を特定してファイアウォールを開くと、期待どおりに機能し始めました。

于 2015-04-13T10:32:26.180 に答える
0

違いは、2 番目のパラメーター (ブール値) にあります。パラメータなしの CheckSignature メソッドのドキュメントを見ると、次のことがわかります。

このメソッドは、参照のダイジェストと署名の値も計算します。

2 番目の方法には、このドキュメントがあります。2 番目のパラメーターが に設定されている場合

falseの場合、署名と証明書の両方を検証します。

証明書を検証するために、このメソッドはおそらく証明書チェーン全体を構築し、このチェーン内のすべての証明書の失効情報を確認します。

于 2014-03-14T20:25:20.810 に答える