問題タブ [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.
java - SOAPHandlersを使用してMTOMSOAPメッセージに署名するにはどうすればよいですか?
現在、2つのハンドラーがあります。1つはロギング用で、もう1つはSOAPメッセージに署名するためのものです(これは本質的にSOAPメッセージを改ざんします)。ハンドラチェーンがない場合、MTOMは期待どおりに機能し、base64バイナリコンテンツをインライン化するのではなく、バイナリコンテンツへの参照を挿入します。
ハンドラーを導入するとすぐに、MTOMコンテンツがインラインに含まれるようになりました。
ハンドラーを使用してSOAPメッセージに署名することは可能ですか、それともこれを行うためのより適切な手段がありますか?
アップデート1 完全なソースを投稿できません。ただし、基本的には、カスタムSOAPHandlerの実装です。タイムスタンプ(ヘッダー内)、カスタムヘッダー、およびSOAP本体に対していくつかの基本的なXMLDsigタイプの操作を実行します。結果のダイジェスト値は、ヘッダーの署名要素に挿入されます。
ロガーに関しては、これも単純なSOAPHandlerです。それまたは署名ハンドラーのいずれかが排他的に使用される場合、結果は同じであり、バイト内容がインライン化されたMTOMメッセージです。私が行った唯一の進歩は、ロギングにMessageHandlerを使用することでした。これにより、(バイトコンテンツがインライン化されていても)SOAPエンベロープを出力し、MTOM分離を維持することができました。したがって、実際には解決策ではありませんが、SOAPメッセージの変更を下位レベルで行う必要があることを示しています。これは私をチューブの道へと導いてくれます。
アップデート2
以下は、MessageHandler
アプローチの例です。生のHTTPダンプには複数の部分からなるメッセージが含まれているのに対し、実際の出力はbase64にインライン化されていることがわかります。この実装と実装の唯一の違いSOAPHandler
は、実際のHTTPリクエストが単一部分のインラインMTOMメッセージに変更されることです。
.net - WCF - SignedXml.CheckSignature が署名済み SOAP 本体で失敗する
署名付き SOAP メッセージの署名を検証しようとしています。(これを邪魔にならないようにするために、私は受信しているメッセージをまったく制御できません) メッセージの本文は、Java アプライアンスによって署名され、送信されます。
SignedXml.CheckSignature メソッドは失敗しますが、受信したメッセージが正しいことは確かです。
関連ビット:
サイン:
c# - Silverlight でデータベース レジストリに署名する方法
Silverlight クライアントにキー ペアがあり、データベース レジストリに署名したいと考えています。これは可能ですか?どのような種類の XML を生成しますか? 切り離された、包まれた、包まれた?
インターネットで見つけた例を試してみましたが、System.Cryptography 名前空間を使用して XMLDSig の署名と作成を行っていますが、Silvelight では名前空間が有効ではありません。Chilkat や Blackbox などの他のライブラリは使用したくありません。
前もって感謝します。
java - XML の特定の部分だけに署名する方法
XML の一部のみに署名することで XML 署名を実行しようとしていますが、多くの検索を行った後、解決策を見つけることができませんでした。
Xpath2変換とEXCLUSIVE正規化を使用してXMLに署名するためにJavaを使用しています。次の XML がある場合
署名すると、次の出力が得られます (実際のデータはダミーに置き換えられます)
署名を検証すると、すべて問題ありませんが、この直後に XML で XSLT を実行し、一部の要素に変更を加えますが、署名された要素 ( ns0:addr
) は変更されません。「addr」要素のみが署名されるべきだと明示的に言っていますが、その親 ( payload
、msg
またはaddr
) のいずれかに変更を加えようとすると、(私の理解によれば) すべきではないときに署名に失敗します。ヘッダー内のものなど、他の要素に変更を加えても、署名は引き続き有効です。
XPath 式 ( //*[local-name()='addr']/*
) をテストしたところ、署名する正しいデータが選択されました ( ns2:data
) が、ルート要素 ( msg
、addr
) から始まるすべての要素も取得しているようです。
UNION などのさまざまな変換も使用しようとしましたが、まったく機能しません。
問題が何であるかを知っている人はいますか?Javaで、デバッグ目的でXMLに署名するときに署名されているものを正確に確認する方法はありますか?
編集:
後で実行される xslt は、名前空間を ns0:addr 要素からルート要素 (msg) に移動するなどのことを行います。また、メイン要素の名前と名前空間を msg から newmsg (および別のデフォルトの名前空間) に変更しますが、署名済みデータ ( ns2:data
) はそのままです。
署名に使用されるコードは、多かれ少なかれここで言及されているコードですhttp://docs.oracle.com/javase/7/docs/technotes/guides/security/xmldsig/XMLDigitalSignature.html
ENVELOPED 変換の代わりに、XPATH2 変換を使用しています。
また、ENVELOPED の代わりに EXCLUSIVE を使用しています
EDIT2:
XML署名プロセスのより細かいデバッグを有効にすることができ、次のようになりました。
FINER: Pre-digested input:
21-Sep-2012 10:51:39 org.jcp.xml.dsig.internal.DigesterOutputStream write
FINER: <ns2:data xmlns="http://someaddress/ad/m1" xmlns:ns0="http://someaddres/ad/m3" xmlns:ns1="http://someotheraddres/ad/m2" xmlns:ns2="http://someaddres/ad/m3"> <ns2:name>somevalue</ns2:name> <ns2:value>354</ns2:value> </ns2:data>
正しいデータに署名しているように見えますが、名前空間が親要素から取得されているため、名前空間が問題であるかどうか疑問に思うように、署名にいくつかの追加の名前空間も追加されています。
余分な名前空間がすべて追加されないようにする方法を知っている人はいますか?
cryptography - XMLDSIG の KeyInfo
私は基本的なデジタル署名にかなり精通しています。そして現在 XMLDSIG を読んでいます。
このページでは署名方法について説明します
http://www.di-mgt.com.au/xmldsig.html
ページ上のサンプル出力 XML ファイルのフィールドに格納されているキーを特定できません。
署名付き証明書には公開鍵があります。しかし、署名されたドキュメントに RSA キーが埋め込まれている必要があるのはなぜですか? これは誰のキーなのでしょうか?
xml - LibXML2 を使用して XMLDSIG の XPath 変換を実装する方法は?
XMLDSIG 仕様からXPath 変換を実装しようとしていますが、ここでは説明しないいくつかの問題があるため、追加のライブラリ ( xmlsec など)を使用できません。
仕様では、XPath 式を指定すると次のように述べています。
XPath 式...は、入力ノード セット内のノードごとに 1 回評価されます。結果はブール値に変換されます。ブール値が true の場合、ノードは出力ノード セットに含まれます。ブール値が false の場合、ノードは出力ノード セットから省略されます。
ドキュメントを解析する方法、XPath コンテキスト オブジェクトを作成する方法、ドキュメント ルートのコンテキストに対して式を評価する方法、式によって選択されていないすべての要素のリンクを解除する方法は知っていますが、それは標準が要求するものではありません。XPath コンテキスト オブジェクトを使用して xmlDoc を「ウォーク」し、各ノードで XPath 式を評価し、ノードを選択的に削除するにはどうすればよいですか?
xml-signature - xmlSig のダイジェストはどこから作成されますか?
xmlSig のダイジェストはどこから作成されますか?
SOAPヘッダーからのチェックサム/ハッシュのみですか?これについて特別な扱いがありますか?
ありがとう
c# - XMLDSig X509SerialNumber が大きすぎて int になりません。XSD 検証に失敗します
X509証明書を使用してXMLDSigを作成しようとしています。以下の XML を生成するMS ( http://msdn.microsoft.com/en-us/library/system.security.cryptography.xml.x509issuerserial.aspx ) から逐語的な例を実行します。XML の問題は、X509SerialNumber フィールドが int にするには長すぎることです。これは、XSD が指定する必要があるものです。したがって、署名に対して XSD 検証を実行しようとすると失敗します。
表示されるエラー メッセージは次のとおりです。 w3.org/2001/XMLSchema:integer ' - 文字列 '72620403068401703770138453672807553309' は有効な整数値ではありません。
X509SerialNumber の正しい値を取得するにはどうすればよいですか?
前もって感謝します!
次の URL の XSD を使用しています。
http://www.w3.org/2000/09/xmldsig#
XSD を検証するコードは次のとおりです。
java - Java & XMLDSig: URI のない参照
javax.xml.crypto.dsig.* パッケージで XMLDSig を使用してテキストに署名しようとしています。署名されているコンテンツへの参照を作成する必要があります。また、プロジェクトの要件によれば、この参照には URI を含めないでください。これは、<Reference URI="">...</Reference> ではなく、<Reference>...</Reference> を意味します。
それが可能で正しいかどうかについての情報は見つかりませんでしたが、XMLDSig は署名ごとに最大 1 つの参照を許可するという要件があります。
誰かが同じ問題に直面しましたか?javax.xml.crypto.dsig.* パッケージを使用し、魔法を使わずにそのような参照で署名を作成するにはどうすればよいですか?
私が理解したように、上記のパッケージは URI (または空の URI) でのみ一部のデータを参照できますが、URI なしでは参照できません。その使用法で何かを見逃したのでしょうか?
java - xmldsig 署名による JAXB マーシャリング
xml コンテンツにデジタル署名を自動的に追加する jaxb マーシャラーを作成することは可能ですか。
たとえば、定義されているクラスがある場合:
そして、マーシャラーによって生成された私のxmlは次のようになります:
そして、私はそれが次のようになることを期待しています:
マーシャラーでそれを行う方法があるといいのですが?そうでない場合、xml に署名する他の簡単な方法はありますか?
前もって感謝します