10

Ruby/Rails を使用して SAML ゲートウェイに取り組んでおり、元のサービスの x509 証明書に対して着信 SAML 応答のxml デジタル署名を検証するコードを作成しようとしています。

私の問題: 署名は、ハッシュされてから署名された XML の正規化されたバージョンに依存しており、specごとに XML を正規化する ruby​​ lib/gem を見つけるのに苦労しています。rubyforge で混乱している超古い宝石を見つけましたが、nokogiri のようなものがこの種の機能をサポートしていればもっと興味があります (nokogiri docs から、そうではありません)。

私は広範囲にグーグル検索しましたが、自分のバージョンを作成したり、既存の c14n-r ライブラリを作り直したりする前に、誰か良い洞察を持っているかどうかを確認するために、ここで尋ねてみようと思いました。

4

6 に答える 6

5

次の 2 つの宝石を試してみてください。

http://rubygems.org/gems/coupa-libxml-ruby

http://rubygems.org/gems/xmlsec-ruby

SAML プロジェクト用に作成しました。1 つ目は、libxml-ruby にパッチを適用して、ベース C ライブラリに canonicalize 関数のバインディングを追加します。

後者はxmlsecのルビバインディングです。今のところ、プロジェクトに必要なのは署名の検証だけですが、あなたのニーズにも合っているようです。

xmlsec を使用することをお勧めします。独自の XML 署名検証コードを作成しようとしても無駄です。複数のエンベロープ署名、埋め込み証明書などを処理する必要があるまで待ってください。そのがらくたをxmlsecに処理させてください。

于 2010-12-15T01:25:12.150 に答える
1

もう少し調べてみると、nokogiri が次のリリースの todo リストに c14n サポートを入れていることがわかりました。それ以上のことはわかりませんが、2010 年 6 月の時点で c14n をサポートする広く使用されている XML ライブラリはないようです。

于 2010-06-16T16:01:37.297 に答える
0

私はruby/railsサービスプロバイダーと.NET(ComponentSoft)IDPを持っています

これは私にとってはうまくいきました(正規化されたバージョンのXMLには問題はありませんでした):

received_certificate = XPath.first(response_document,"//samlp:Response//Signature//KeyInfo//X509Data//X509Certificate").text

def self.verify_signature(received_certificate, idp_certificate_path)
  certificate ||= OpenSSL::X509::Certificate.new(File.read(idp_certificate_path))
  cert_decoded = Base64.decode64(received_certificate)
  cert = OpenSSL::X509::Certificate.new(cert_decoded)
  certificate.verify(cert.public_key)
end
于 2010-06-15T15:52:18.743 に答える
0

おそらく少し遅れており、あまり理想的ではありませんが、このフォークは正規化のためにコマンドライン経由で XMLStarlet を使用します。

于 2011-04-27T19:04:55.040 に答える
0

xmlcanonicalizer に問題がありました。

xmlstarlet は私のために働いた:

`echo "#{xml_str}" | xmlstarlet c14n`
于 2011-06-30T09:19:23.443 に答える
0

xmlcanonicalizer gem は、入手可能な最新の Ruby カノニカライザーのようです。

https://github.com/andrewferk/xmlcanonicalizer

ただし、一部の XML ツリーを正規化する際に役に立たないバグがあります。親切な人がパッチを提出しましたが、まだ適用されていません:

https://github.com/andrewferk/xmlcanonicalizer/pull/1

このパッチが適用された gem と ruby​​-saml がそのトリックを実行します (さらに、SAML SSO を実装しようとしている場合は、さらに:

https://github.com/onelogin/ruby-saml

物事を機能させるために私が無駄にした3日間を誰かが救うのに役立つことを願っています! :)

于 2011-06-13T02:09:51.273 に答える