Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

OSS Gate Workshop: Freee: 2021-11-25: ketoketo: xmldsig: Work log #1514

Closed
ketoketo opened this issue Nov 25, 2021 · 22 comments
Closed

OSS Gate Workshop: Freee: 2021-11-25: ketoketo: xmldsig: Work log #1514

ketoketo opened this issue Nov 25, 2021 · 22 comments

Comments

@ketoketo
Copy link
Contributor

ketoketo commented Nov 25, 2021

This is a work log of a "OSS Gate workshop".
"OSS Gate workshop" is an activity to increase OSS developers.
Here's been discussed in Japanese. Thanks.

作業ログ作成時の説明

以下のテンプレートを埋めてタイトルに設定します。埋め方例はスクロールすると見えてきます。

OSS Gate Workshop: ${LOCATION}: ${YEAR}-${MONTH}-${DAY}: ${ACCOUNT_NAME}: ${OSS_NAME}: Work log

タイトル例↓:

OSS Gate Workshop: Tokyo: 2017-01-16: kou: Rabbit: Work log

OSS Gateワークショップ関連情報

  • スライド:ワークショップの進行に使っているスライドがあります。
  • チャット:OSS開発に関することならなんでも相談できます。ワークショップが終わった後もオンラインで相談しながら継続的にOSSの開発に参加しましょう!
  • シナリオ:ワークショップの目的・内容・進め方の詳細が書いています。
  • 過去のビギナーの作業ログ:他の人の作業ログから学べることがいろいろあるはずです。
@ketoketo ketoketo changed the title OSS Gate Workshop: Tokyo: 2021-11-25: ketoketo: xmldsig: Work log OSS Gate Workshop: Freee: 2021-11-25: ketoketo: xmldsig: Work log Nov 25, 2021
@ketoketo
Copy link
Contributor Author

これを動かす
https://github.com/benoist/xmldsig
ライセンスはMIT License
https://github.com/benoist/xmldsig/blob/master/LICENSE

@tdtds
Copy link
Member

tdtds commented Nov 25, 2021

わいわい

1 similar comment
@teyamagu
Copy link
Contributor

わいわい

@ketoketo
Copy link
Contributor Author

Gemfile に以下を追加してインストールする

source 'https://rubygems.org'

gem 'xmldsig'

@ketoketo
Copy link
Contributor Author

READMEに沿ってinstall

$ bundle
Fetching gem metadata from https://rubygems.org/........
Resolving dependencies...
Using bundler 2.2.27
Using racc 1.6.0
Using nokogiri 1.12.5 (x86_64-linux)
Fetching xmldsig 0.6.6
Installing xmldsig 0.6.6
Bundle complete! 1 Gemfile dependency, 4 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.

0.6.6(latest)がinstallされた

@ketoketo
Copy link
Contributor Author

https://github.com/benoist/xmldsig#usage
usageを実行する

@ketoketo
Copy link
Contributor Author

private_key = OpenSSL::PKey::RSA.new(File.read("key.pem"))
certificate = OpenSSL::X509::Certificate.new(File.read("certificate.cer"))

usageを動かすためにprivate_keyでxmlに署名しcertificate.cerでverifyするようなのでこれを作成する必要がある

@ketoketo
Copy link
Contributor Author

以下でkey.pem(秘密鍵を作成)

$ openssl genrsa -out key.pem 2048

@ketoketo
Copy link
Contributor Author

certificate.cerの作り方がわからないので調べる必要がある

@ketoketo
Copy link
Contributor Author

自己署名証明書の作成方法を参考にして作成

$ openssl req -new -key key.pem -out ca-csr.pem
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Gotanda
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Dev
Organizational Unit Name (eg, section) []:Dev
Common Name (e.g. server FQDN or YOUR name) []:ca-server
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

$ openssl req -x509 -key key.pem -in ca-csr.pem -out ca-crt.pem -days 3560
$ openssl x509 -outform der -in ca-crt.pem -out certificate.cer

@ketoketo
Copy link
Contributor Author

bundle consoleでusageを動かしてみる

$ bundle console
irb(main):001:0>

@ketoketo
Copy link
Contributor Author

以下のブロック以外は動かすことができた

# Custom ID attribute
signed_document = Xmldsig::SignedDocument.new(signed_xml, id_attr: "MyID")
signed_document.validate(certificate)

id_attrがxmlに存在すれば動くんだろう

@ketoketo
Copy link
Contributor Author

ketoketo commented Nov 25, 2021

フィードバック1:usageをそのまま実行するとエラーが起きる

OS:Ubuntu 18.04.4 LTS
Ruby:2.6.6

# Custom ID attribute
signed_document = Xmldsig::SignedDocument.new(signed_xml, id_attr: "MyID")
signed_document.validate(certificate)

を実行すると、以下のエラーが発生する

Xmldsig::Reference::ReferencedNodeNotFound (Could not find the referenced node foo')

usageはエラーなく動いてほしいので動くように修正したい

@ketoketo
Copy link
Contributor Author

フィードバック2:usageにいきなり秘密鍵と証明書がでてくるのでサポートしたほうがいいかも

秘密鍵と証明書の生成の部分のサンプルコードがあった方が利用者としてはありがたい気がする

@ketoketo
Copy link
Contributor Author

フィードバック1はPR作成済み
benoist/xmldsig#48
フィードバック2は提案のissueにしようかと思います

@ketoketo
Copy link
Contributor Author

reference_nodeのURIでxpointerが指定された場合の対応を考える
既存の解析ライブラリがないか

@ketoketo
Copy link
Contributor Author

https://www.w3.org/TR/xmldsig-core/#sec-ReferenceProcessingModel

When a fragment is not preceded by a URI in the URI-Reference, XML Signature applications must support the null URI and shortname XPointer [XPTR-FRAMEWORK]. We RECOMMEND support for the same-document XPointers '#xpointer(/)' and '#xpointer(id('ID'))' if the application also intends to support any canonicalization that preserves comments. (Otherwise URI="#foo" will automatically remove comments before the canonicalization can even be invoked due to the processing defined in Same-Document URI-References (section 4.4.3.3).) All other support for XPointers is optional, especially all support for shortname and other XPointers in external resources since the application may not have control over how the fragment is generated (leading to interoperability problems and validation failures).

アプリケーションがコメントを保持する任意の正規化をサポートすることも意図している場合は、同一ドキュメントXPointerの「#xpointer(/)」と「#xpointer(id('ID')) 」のサポートを推奨する。
その他のXPointerのサポートはすべてオプションであり

ということだからそこだけ実装でもいいのかも

@ketoketo
Copy link
Contributor Author

xpointerの件のPRを作成した
benoist/xmldsig#49
仕様的にxpointerの実装部分が部分的なものでもよくてよかった

@ketoketo
Copy link
Contributor Author

reference nodeのuriに外部ファイル名が指定されていた場合、rootから取り込めるようにする

@ketoketo
Copy link
Contributor Author

File.extname で拡張子あれば外部ファイル認定でいいか確認中

@ketoketo
Copy link
Contributor Author

uriに外部ファイル名が指定されていた場合の対応のPRを作成した
benoist/xmldsig#50

@ketoketo
Copy link
Contributor Author

これで最後のPR
transformのnodeが存在しない場合でもエラーにならないように修正
benoist/xmldsig#51

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants