問題タブ [xml-dsig]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - SignedXml を使用してドキュメントの一部で xml 署名を検証する
SignedXml クラスを使用して、XML ドキュメントの署名を検証しています。署名は文書の一部のみを参照します。
署名を検証することはできますが、検証する必要があるドキュメントの特定の部分に署名が署名していることを確認するにはどうすればよいですか? 誰かが同じ鍵を使用してドキュメントの別の部分に署名するだけで、その署名は引き続き有効です。
.net - .NETでXMLDSIGチェーンを確認しますか?
XMLDSIGを使用して構成ファイルに署名しています。CAがXMLの署名に使用できるキーを発行できるようにしたいと思います。次に、XMLがCAによって発行されたキーで署名されていることを確認したいと思います。
SignedXml
オブジェクトから署名証明書を取得するにはどうすればよいですか?証明書チェーンをたどって特定のCAに戻るにはどうすればよいですか?
CAの公開鍵は、証明書ストアではなく実行可能ファイルに保存されることに注意してください。
.net - .NET で公開鍵を比較するにはどうすればよいですか?
X509Certificate2
公開鍵を含む があります。公開鍵も含まれていRSACryptoServiceProvider
ます。SignedXml.CheckSignatureReturningKey
一方が他方から来たかどうかを知りたい。2つを比較するにはどうすればよいですか?
.net - XML DSIG: .NET でのエンベロープ署名変換
XmlDsigEnvelopedSignatureTransformを使用 して、RSA 秘密鍵を使用して XML ファイルにデジタル署名しています。
ただし、本当に必要なのは、「エンベロープ」署名を使用して xml に署名することです。.NET はそれをネイティブでサポートしていますか?
ちなみに、私のコードは次のとおりです。
.net - .NET は、非標準の XMLDSIG 署名要素名をサポートしていません
エンベロープ XML デジタル署名 (XMLDSIG) を必要とする業界仕様を実装しようとしています。例 ( ) に準拠する代わりに、<Signature>
私の仕様では署名要素に独自の名前を使用しています。
したがって、要素は「署名」という名前ではなく、dsig XML 名前空間ではなく、ドメインの XML 名前空間にあります。
多くの余分な作業を行うことで、このカスタム シグネチャを .NET で作成できます。
- .NET SignedXml クラスを使用して <dsig:Signature> 要素を作成します
- DOM を操作して <dsig:Signature> を削除し、要素を <myns:ensembleSignature> として再作成します。
しかし、着信要素の名前を <dsig:Signature> に戻しても、.NET は着信 <myns:ensembleSignature> を検証できないようです。
私は何度も XMLDSIG 仕様を検討してきました。すべての例で <Signature> が使用されていますが、エンベロープされた変換であっても、この要素名は特に必要ないようです。これは、XMLDSIG 仕様にそのような要件がない場合に、この単一の要素名しかサポートしないという SignedXml のバグですか?
c# - ルート証明書をインストールせずに、.NETでXMLDSIG署名を検証できますか?
XMLDSIGを使用して、.configファイルが改ざんされていないことを確認したいと思います。また、署名を信頼できるように、署名チェーンを検証できるようにしたいと思います。
チェーンには3つの証明書があります。
ファイルが中間CAによって発行されたキーで署名されていることを確認します。
ユーザーのWindows証明書ストアに証明書をインストールせずにこれを実行したいと思います。これらは自己署名証明書であるため、すべてのユーザーがルートストアにインストールすることを望んでいるわけではありません。ルートストアにインストールしても問題ありません。
元の.CERファイルがあります。これらはSignatureブロックに含まれており、検証コードに含めることができます。を使用して、これから証明書チェーンを構築できX509ChainPolicy.ExtraStore
ます。
証明書がルートストアにインストールされていない場合、チェーンを確認してから、をX509Chain.Build
返します。false
チェーンにはが含まX509ChainStatusFlags.UntrustedRoot
れています。
この操作の間だけ信頼できる証明書を追加できますか?
xml - DSIG を使用した XML のタイムスタンプ
XML ファイルにタイムスタンプを付ける必要があります。これに関する解決策はありますか?デジタル署名を作成して XML-DSIG 構造に入れることはできますが、タイムスタンプを使用する必要があります。基本的には同じプロセスです。署名は自分で行い、タイムスタンプは TSA (タイムスタンプ機関) で行います。
はい、もちろん、clasis 署名が作成されるのと同じ方法でハッシュを作成できます。TSA からの応答は、いくつかの要素 (たとえば ) に入れられます。しかし、それはきれいではないようです。また、利用可能なツール (Tools for XML-DSIG) では検証を行うことができません。
アドバイスをありがとう。
php - DER ASN.1 から XMLDSIG P1363 への PHP DSA 署名の変換
サーバーへのSAMLレスポンスを介してログインを試みているPHPアプリ(SAML IdPとして機能)を作成しています(SAML SPとして機能しています。現在、サーバーがリクエストを拒否することに固執しています(500を取得しただけです)要求の形式が正しくありません)。
テストアプリを(Java/openSAMLで-サーバーが使用していると確信しています)作成しましたが、問題はSAML SignatureValidator検証が生成することであることがわかります
org.apache.xml.security.signature.XMLSignatureException: DSA 署名の XMLDSIG 形式が無効です
SAML SignatureValidator コードを見ると、XMLDISG 署名の長さが正確に 40 バイト (P1363 形式?) であることが確認されますが、生成された署名の長さは 46 ~ 48 バイト (DER ASN.1 形式?) であることがわかります。
署名は、以下のように PHP openssl_sign によって生成されています。
署名の例 (わかりやすくするために 2 進数から 16 進数で表示) は次のとおりです。これは 46 バイトですが、(ランダム キーによって?) 46 から 48 バイトまで変化することに気付きました。
302c02146e74afeddb0fafa646757d73b43bca688a12ffc5021473dc0ca572352c922b80abd0662965e7b866416d
以下のように PHP openssl_verify を使用して、この署名を正常に検証できます。
しかし、私のテスト アプリでは、SignatureValidator の検証を行うと (以下のように)、XMLSignatureException: Invalid XMLDSIG format of DSA signature
例外が発生します。
PHP openssl_sign によって生成された 46-48 DER ASN.1 形式から、openSAML によって期待される 40 バイトの P1363 形式への PHP 署名変換を行う方法を知っている人はいますか?
xml - アルゴリズムURIから作成するオブジェクトのクラスを決定する方法
仕様が課せられているため、XMLに署名し、署名されたXMLを検証するための独自のC#コードを作成しました。SignedXmlクラスとほとんど同じですが、この方法では、たとえばXML名前空間プレフィックスを使用するかどうかにかかわらずより柔軟になります(SignedXmlは署名XMLの名前空間プレフィックスを好まないようですが、私のXML仕様ではそれらが必要であると言われています)。署名のアルゴリズム(仕様は現在sha256と言っています)。
すべてが機能しているように見えますが、私を悩ませている「不完全さ」は、たとえば、xmlを検証するときに、特定のクラスのオブジェクトを使用してデータを変換または検証する必要があり、指定されたアルゴリズムURIだけです。 XMLで。例としては正規化があります。XMLがクラスを使用できること"http://www.w3.org/2001/10/xml-exc-c14n#"
を知ってXmlDsigExcC14NTransform
いると言っている場合、私の質問は次のとおりです。そのようなURI(または任意のURI)から特定のクラスのオブジェクトに到達する方法はありますか?
私は今、私が知っているURIのリストと、それらが参照しているオブジェクトクラス(または、既知のオブジェクトクラスのリストのAlgorithmプロパティと比較している)を使用していますがXmlDsigExcC14NTransform.Algorithm
、これは私が本当に好きなものではありません。
c# - Xsd2Code と xmldsig
Xsd2Code を使用して xsd からコードを生成する際に問題があります。xsd は次のようになります。
生成されたクラスのインスタンスをシリアル化しようとすると、エラーが発生します。
ここでエラーが発生します:
その属性を次のように変更した場合のイベント:
..私は他のエラーを取得します:
xmldsig で Xsd2Code をうまく使用した人はいますか? 可能であれば、手動ではなく Xsd2Code ジェネレーターでこれを解決したいと思います。他のオプションはありますか?