問題タブ [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# - XML署名ファイルでbase64署名値を分割する
私はいくつかの XML ファイルに署名しようとしていますが、うまくいきましたが、署名を確認する方法が見つかりません。受信者サービスはそれを問題なく受け入れますが (xml)、署名にエラーが見つかりました。
Web サービスのドキュメントを確認したところ、署名値は 1 行あたり最大 76 文字であり、xml ファイルをロードまたは編集するたびに .whitespace を保持する必要があるとのことでした。
これは、一度出力された xml ファイルです (セキュリティのためにいくつかの値を編集しました) puu.sh/d6lwC/25eb2a0d02.png (2 つの署名値が間隔のない長い行になっていることに注意してください。
これは私がどのように見えるべきだと思うかです: puu.sh/d6lCV/48b0cc0cd7.png
これは、サービス ドキュメントに記載されている xml ファイルです: puu.sh/d6ltJ/bd8e25a4b4.png
これが私の署名コードです
私の質問は:
XML自体の他のコア値を損なうことなく、署名値の行を簡単に分割するにはどうすればよいですか?その変更により、Webサービスがxmlファイルの署名を正しく読み取って検証できるようになりますか?
事前に感謝し、私のくだらない英語を許してください。
編集: この質問を見つけました https://stackoverflow.com/questions/24916486/how-to-do-enveloped-rsa-sha1-digital-signature-of-xml-data-using-php
彼はどういうわけか、このコードでbase64の値をチャンクと76の長さで分割するphpを介して私の問題を解決することができました
どうすればc#でそれを達成できますか?
c# - C# で XML ファイルの署名を検証する方法(証明書ファイルではない)?
政府の請求システム用のコードをいくつか作成していますが、数週間読んだ後、行き止まりになりました。
サーバーから受信した xml ファイル内の少なくとも 2 つの署名を検証する必要があります。私が証明書ファイルまたは x509store で署名しているときに署名を検証するために、パブリック MSDN に基づいていくつかのコードを作成し、正常に動作しました。問題なく、参照に基づいて各署名に署名および検証できます。
しかし、ファイルを受け取ったとき、証明書ファイルがないため、それを検証する方法がわかりません。内部にタグがあることは確かです。その値を取得してopenssl.exeに配置すると、確認できます署名者の身元ですが、署名が正しく行われたかどうかを確認する方法はわかりません
http://puu.sh/dypRH/c45e200202.png
過去に私が使用した
今、私はsignedXml.CheckSignature())を試します
毎回失敗します。どの署名を選択するかを参照できないため、for を作成しました
それでも彼らは失敗する
また、xml ファイルに基づいて証明書を作成しました。
検証しますが、失敗します
私は今何をすべきか本当にわかりません、私はちょっと必死です、これがxmlファイルです
http://puu.sh/dyqcv/356dd289ae.xml
署名を検証する必要があります。この後、応答ファイルを作成してサーバーに送り返す必要があります (準備はできていますが、署名を検証できないため、先に進みたくありません)。
ああ、はい、私は名前空間を削除し、署名のチェック/計算の前にすべてを線形化しました
あらゆる種類の助けに心から感謝します。どこで試してみるべきかの小さな指針でも役立ちます。
ああ、申し訳ありませんが、私は本当にすべてのウェブサイトをチェックしました。この質問が繰り返されないことを願っています.
しかし、私は再び尋ねるのに十分な動機を持っていました
https://stackoverflow.com/questions/27158035/replace-string-with-another-string-does-not-work
これには苦労しました笑
よろしく!
編集: user409104 が尋ねたように、ここにファイル全体の署名値 (3 つのうちの 1 つ目) があり、署名ノードと keyinfo 値も含まれています
xmlファイルに基づいてキーを作成するためにこれを作成しましたが、どれを選択するかを選択できません。最初に見つかったものを使用していると思います(ただし、xmlには3つあります)また、使用方法もわかりませんそれを検証します。
RSAKeyValue で x509certificate/2 を作成できません。
hash - XML-DSIG の SignatureValue 計算
C++/CLI でNET フレームワーク コンポーネント ( RSACryptoServiceProvider )を使用して XMLDSIG の XML 要素の署名を返すメソッドを作成しようとしています。XMLDSIG 仕様 ( http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/ ) からのこの抜粋を簡単な言葉で説明してください。プログラミングと数学のバックグラウンドがほとんどないため、これを理解できない - または、これが実装されている例として、実際のコードの抜粋を提供しますか?
RSA 署名の SignatureValue コンテンツは、RFC 2437 [PKCS1、セクション 8.1.1: RSASSA-PKCS1-v1_5 署名方式の署名生成] に従って計算されたオクテット文字列の base64 [MIME] エンコードです。EMSA-PKCS1-V1_5-ENCODE 関数 RFC 2437 [PKCS1、セクション 9.2.1] で指定されているように、署名関数への値の入力には、ハッシュ関数の前に保留されたアルゴリズム オブジェクト識別子が含まれている必要がありますが、ASN の可用性.1 パーサーと OID の認識は、署名検証者には必要ありません。PKCS#1 v1.5 表現は次のようになります。 CRYPT (PAD (ASN.1 (OID, DIGEST (data)))) パディングされた ASN.1 は次の形式になることに注意してください。FF* | 00 | プレフィックス | ハッシュ "|" 連結、「01」、「FF」、「00」対応する 16 進数値の固定オクテット、「ハッシュ」はデータの SHA1 ダイジェスト、「プレフィックス」は PKCS1 [RFC 2437] で必要な ASN.1 BER SHA1 アルゴリズム指定子プレフィックス、つまり 16 進数の 30 21 30 09 です。 06 05 2B 0E 03 02 1A 05 00 04 14 このプレフィックスは、標準の暗号化ライブラリを使いやすくするために含まれています。FF オクテットは、CRYPTed される量の値が RSA モジュラスよりも 1 オクテット短くなるように、最大回数繰り返さなければなりません。
つまり、特定の XML 要素のハッシュ値を持っている場合(base64 でエンコードされていませんよね?)、それをSignHash ( RSACryptoServiceProvider 内) 関数に送信する前にどうすればよいでしょうか? テキストに書いてあることは知っているが、理解に苦しむ。「CRYPT (PAD (ASN.1 (OID, DIGEST (data))))」は、部分的にはわかるものの、まったくわかりません... OID を取得してから ASN を取得する方法がわかりません。そして、それをどのように埋めるか...
xml - XMLDSIG で正確に何を消化して署名するか、またその方法は? (または、OSX ネイティブのクライアントが、サーバーで計算された XMLDSIG と一致しません)
エンベロープ署名、sha1 ダイジェスト、および rss-sha1 署名を使用して XMLDSIG 仕様に従って xml ドキュメントに署名しようとしていますが、サーバーは「297 - 拒否: 署名が計算された [結果] と一致しません」(「297 - Rejeicao : Assinatura difere do calculado" ブラジルポルトガル語原文)
私のクライアント アプリケーションは Mac OS X ネイティブである必要があります (つまり、Objective-C と Swift)。私は Apple の CryptoCompatibility ガイドラインに従い、Security.framework の SecSignTransform と CommonCrypto の CC_SHA1 を使用しています。
XMLDSIG にしようとしている XML を次に示します (スペースを節約するために、PrettyPrint を使用せず、用語を省略しました)。
残念ながら、.Net と Java の両方が XMLDSIG に対して非常に高レベルのサポートを提供するため、XML のどの部分を取得し、何を保持し、何を削除するかに関する詳細な情報は、インターネット上にほとんどありません。W3.org 自身の仕様はかなり無味乾燥ですが、私が見つけた詳細な説明は次のとおりでした: http://www.di-mgt.com.au/xmldsig2.html
不一致が sha1 ダイジェストにあるのか、rsa-sha1 署名にあるのかはわかりません。戻りコードは不明です。また、間違った入力を使用しているかどうか、または使用している Mac OS X ライブラリがサーバー (.Net ベース) と互換性がないかどうかもわかりません。
ダイジェストのコードは次のとおりです。同じドキュメントの URI 参照を使用していることに注意してください。
コードで使用される追加のメソッド:
ダイジェストを計算した後、XML ドキュメントを作成するために、事前にフォーマットされた署名 XML 文字列に挿入されます。次に、SignedInfo ノードが抽出され、SignatureValue の生成に使用されます。
私が見る限り、すべてが正しく、W3.org の XMLDSIG 仕様に準拠しています。それでも、サーバーは生成された XML を常に拒否します。
私は機知に富んでいます。どんな助けと知恵も大歓迎です!!
xml-dsig - xmlsec1 を使用した XML 署名
次のコマンドを使用して、テスト用の xml に P12 秘密鍵で署名しようとしましたが、次のエラーが発生しました。
なにか提案を?
.net - X509Certificate2 から X509SerialNumber 整数値を取得する
X509.v3証明書(X509Certificate2オブジェクトとして持っている)のシリアル番号を取得して、XADES XMLDSIGのX509SerialNumber要素に入れようとしていますが、これは整数であるはずです。私が使用している証明書そのものを使用して、他のソフトウェアによって作成された XML 署名があります。そのシリアル番号は次のとおりです。
残念ながら、前述の XML の署名に使用されたまさにその証明書で初期化された X509Certificate2 オブジェクトからこの値を取得できません。これらは私が得ている価値です
GetSerialNumber()がBase64Stringを返すと思います。ご覧のとおり、GetSerialNumber()とGetSerialNumber()は異なる値を返します。これらの値から値「1315010063538360283821765366094690」の整数を取得する方法は何ですか?