問題タブ [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.
c# - .Net 4.0 C# SHA256 キーをロードすると、SignatureAlgorithm が SHA1 に変更されます
私は今、これに丸一週間苦労しており、誰かが私を助けてくれることを願っています.
SHA256 と xmldsig を使用して xml に署名する必要があります。このために、SignedXML クラスを使用します。このクラスを調べると、読み込まれたキーの SignatureAlgorithm 値を使用して、使用するハッシュ タイプを決定していることがわかります。
キーをどのようにロードしても(証明書ファイルのロードを介して証明書ストアを介して)、SHA1がSignatureAlgorithmとして表示されます。MMC 証明書ストアで証明書の詳細を調べると、SHA256 が SignatureAlgorithm として表示されます。
openssl と makecert の両方を使用して SHA256 証明書キーを生成しようとしましたが、どちらも .Net で SHA1 として読み込まれます。SignatureMethod として SHA1 を使用します
.Net 4.0 は SHA256 をサポートする必要があります。
xml - 自分の署名を物事に追加するのを妨げているのは何ですか?
デジタル署名の理解に欠けているものがあり、誰かがそれを解決してくれることを望んでいました。
デジタル署名は、何かが変更されておらず、人からのものであることを確認するためのものです。
それで、どういうわけか署名付きのxmlファイルを傍受したとしましょう。署名を切り取ってから、ファイルを編集します。次に、このファイルの新しい署名を生成し、送信先に送信します。彼らは参照をチェックし、そうです。ファイルは改ざんされていません。しかし、署名だけが改ざんされていました。これは不可能です。では、このパズルで欠けている巨大なピースは何ですか?
c# - C# XmlDsigC14NTransform が xml からすべての空白を削除する理由
XmlDsigC14NTransform に問題があります。http://www.di-mgt.com.au/xmldsig2.html (正規化された SignedInfo 要素を構成し、その SignatureValue を計算する部分)から例を繰り返そうとして いますが、私のコードは xml から空白を失い、正しい 16 進ダンプを取得できません。
私のC#コード:
ソース Xml (ファイル C:\temp\new_sign.txt から):
空白を xml に保存し、サンプル ( http://www.di-mgt.com.au/xmldsig2.html )のように正規化された xml を取得するにはどうすればよいですか?
ruby - Ruby on Rails を使用して SiteMinder からの XML 署名を検証する
Ruby on Rails xmldsig gem を使用して SiteMinder によって作成された XML 署名付きドキュメントを検証できません。gem のクローンを作成し、デバッガーで実行しましたが、問題は見つかりませんでした。両方とも失敗します[:digest_value, :signature]
。ただし、このオンライン ツールでは、XML が有効であることが示されています (ただし、証明書は信頼されていません):
http://www.globaltrustfinder.com/XMLSignatureVerificationStep1.aspx
このオンライン ツールは、XML が無効であると言っています: http://www.aleksey.com/xmlsec/xmldsig-verifier.html
申し訳ありませんが、XML には電子メール アドレスが含まれているため投稿できません。また、署名されている場合はそれらを取り出しても役に立ちません。しかし、ここに<ds:Signature>
http://pastebin.com/CxYkgBhxがあります
コマンド ラインから xmlsec1 を実行しようとしましたが、正しくインストールされませんでした。
XMLSpy でドキュメントを検証しようとしましたが、Canonical XML of type 'http://www.w3.org/2001/10/xml-exc-c14n#' is not supported
?!と表示されました。
xml - XmlDSig: 参照処理モデル (ノード セット vs オクテット ストリーム)
XML Advanced Electronic Signaturesを勉強しています。
「ArchiveTimeStamp」(58ページ)を作成するには、仕様には次のように記載されています。
取得した ds:Reference 要素を XMLDSIG の参照処理モデルに従って処理します。
結果が XML ノード セットの場合は、それを正規化します。(...)
参照処理モデルは次のとおりです。
このプロセスでは、「URI=...」と「ds:Transforms」を使用してデータを取得します。
以下は、( 4.3.3.2 The Reference Processing Model )から一部を抜粋したものです。
URI デリファレンスまたは後続の変換の結果のデータ型は、オクテット ストリームまたは XPath ノード セットのいずれかです。(...)
この仕様では、「同じドキュメント」参照は、ハッシュ記号 (「#」) の後にフラグメントが続くか、または空の URI (...) で構成される URI 参照として定義されます。
URI 参照がそのような「同じドキュメント」参照でない限り、URI 参照の逆参照の結果はオクテット ストリームでなければなりません。特に、URI によって識別される XML ドキュメントは、URI が同一ドキュメント参照でない限り、または XML 解析を必要とする変換が適用されない限り、署名アプリケーションによって解析されません。
次の例は、URI 属性が何を識別し、どのように逆参照されるかを示しています。
URI="http://example.com/bar.xml"
オクテットを識別します (...)URI="http://example.com/bar.xml#chapter1"
オクテット ストリームとして提供される外部 XML リソース (...) の ID 属性値「chapter1」を持つ要素を識別します。(...)URI=""
ノードセットを識別します (...)URI="#chapter1"
(...) を含むノードセットを識別します
質問。
これらの参照について:
結果 1#: ( <file> ... childs ... <file>
)。Digest Transform 適用なし
結果 2#: ( xml with exc-c14n
)。Digest Transform 適用なし
結果 3#: ( exc-c14n を持つ子のみ<child_1/>...<child_x/>
) Digest Transform を適用しません。これは解析する有効な XML ファイルではありません。ルートが 1 つではありません。ただし、fakefile.xml コンテキストでは「ノード セット」にすることができます。
結果 (1#、2#、および 3#) は「オクテット ストリーム」ですか?
理由: URI 参照がそのような「同じドキュメント」参照でない限り、URI 参照の逆参照の結果はオクテット ストリームである必要があります。
それとも、XML Advanced Electronic Signatures が正規化するために必要な「XML ノード セット」ですか?
理由: (...) 特に、URI によって識別される XML ドキュメントは、URI が同一ドキュメント参照でない限り、または XML 解析を必要とする変換が適用されない限り、署名アプリケーションによって解析されません。
または (XML 解析を必要とする変換が適用されない限り) は参照コンテキストでのみ有効で、結果はオクテット ストリームですか?
記事は大歓迎です。
c# - PHP で XML ファイルにデジタル署名する
C# アプリケーションで検証するには、RSA 秘密鍵を使用して XML ファイルに署名する必要があります。C# アプリケーションで xml に署名すると、最終的な出力は次のようになります。
C# でのサインイン:
PHPで同じものを作るにはどうすればよいですか?
xml - さまざまな XML 要素に署名し、その親にも署名するにはどうすればよいですか?
私が消費しようとしている SOAP Web サービスでは、次のような構造の XML を送信する必要があります。
<Signature>
内容は次のとおりです。
どうすればいいですか?
xmlsec1 --id-attr:Id Father --id-attr:Id Child
フィールドが空白のファイルを渡して試していますSignature
が、最初のフィールドしか埋めません。
また、子に単独で署名して、それを父のテンプレートに入れて、父に署名しようとしましたがxmlsec1
、2 番目の要素を無視します (そして、最初の署名の値を変更します。その要素内にカプセル化されるはずではありませんでしたか? )。
関係ないかもしれませんが、どなたか教えてください。
むしろ Python コード内からこれを行いたいのですが、使用しようとした 3 つのライブラリ、python-xmlsec、pyxmlsec、およびxmldsigはすべて、 の属性を生成/再認識できませんでしURI
た<Reference>
。おそらく の が欠けているためでしょうが、--id-attr
私xmlsec1
が得ているこれらの問題は、私がこの XML 署名のことを本当に理解していないという事実を明らかにしています。私がそれを理解するのを手伝ってください。
編集
これらの XML 署名の問題に苦労している人はたくさんいるようですが、同じ XML ファイル内の 2 つの異なる要素に署名しようとしている人はいません。このケースはw3C Scenarios FAQにもリストされていません。これは、私の Web サービスが複数の署名を必要とするため、すべてが奇妙に見えます。それともしませんか?彼らが公開しているスキーマは次のとおりです: https://github.com/proge/PyNFSe/blob/master/pysped_nfse/nfse.xsd#L539 (この要素<xsd:element name="EnviarLoteRpsEnvio">
と子を参照)。
c# - SignedXml.CheckSignature は、秘密鍵で検証した場合にのみ true を返します
私はいくつかの同様の質問を見てきましたが、私が求めているものに正確に対処するものはありません.
XML に署名してから、C# を使用して公開鍵で検証しようとしています。
キーを使用して XML に署名し、キーを XML にエクスポートします。次に、キーと署名付き XML を別のコンピューターに移動し、 を使用してキーをインポートしrsa.FromXmlString(doc.InnerXml)
、XML 署名を検証します。
これは、.xml を使用して公開鍵と秘密鍵の両方を XML にエクスポートすると機能しますrsa.ToXmlString(True)
。ただし、を使用して自分の公開鍵のみをエクスポートしたいと考えていますrsa.ToXmlString(False)
。公開鍵のみをエクスポートして 2 台目のコンピューターにインポートし、XML 署名を検証しようとすると、署名が無効であると表示されます。
まず、署名された XML を公開鍵だけで検証できるようにする必要がありますか?
第二に、それが本当なら、なぜ私の検証 XML 関数は、公開鍵だけではなく、公開鍵と秘密鍵のペアでしか機能しないのですか?
この問題をデバッグする方法について何か知恵はありますか? signedXml.CheckSignature(Key);
失敗した理由に関する情報が提供されていないため、他に何をすべきかわかりません。
私のインポートキー、エクスポートキー、署名 XML、および検証 XML 機能は以下のとおりです。さらに情報が必要な場合はお知らせください。