LoginSignup
0
1

More than 3 years have passed since last update.

Python で タイムスタンプ局を操作するには

Last updated at Posted at 2020-06-29

Python+OpenSSLを使うには?

  • pyOpensslが一番ハードルが低い。
    • CA局も作ろうと思えば作ることができる。
  • import ssl
    • 比較的低レイヤーのOpenSSLの機能を触ることができる。

今回やろうとしていることは、(オレオレ)タイムスタンプ局

事前情報として

  • (オレオレ)CA局とは別物
  • OpenSSLでいうと、version 1.1.0あたりから本流に組み込まれた「openssl ts」コマンド体系でできることをしたい。

シェルでopensslコマンドを叩いてそもそも実現可能か?

色々調べるが、下記のサイトぐらいしか具体的な記事が見当たらない。
Setting to create Timestamping Authority certificate signing request
このサイトの情報を見ると、設定ファイルopenssl.cfg全体が掲載されているので、それを元にコマンドレベルで実行できるのか確認してみる。

  • 基本的には動作するようだが、色々とひっかかる部分があった。
  • 設定ファイルの情報が全体的に少し古い。暗号化方式の設定にSHA-2が含まれていない等。
  • 実行時にopensslのエラーが出るので、それを元に一つ一つエラーを解消していく。
  • 最後の検証「openssl ts -verify」で、証明書が見つからないエラーになる。
  • コマンドの最後「openssl ts -verify ・・・ -CAfile 」 の後に、「-untrusted <タイムスタンプ局の証明書>」オプションが必要)

Pythonから同じようにできないのか?

  • pyOpensslを調べるも、それらしい機能が見当たらない。
    • pyOpensslが依存関係にあるcryptography.hazmatにもなさそう。
    • 例えば、OpenSSLのts_main関数に含まれている TS_REQ_new()関数辺りが使えるようになっていない。
    • そもそも、pyOpensslはcryptographyに依存しており、cryptographyはopensslのversion 1.0.2までのように見える?

結局Pythonからシェル経由で駆動させるしかないのか?

$ openssl ts -query ・・・ 
$ openssl ts -reply ・・・
$ openssl ts -verify ・・・

上記のコマンドについてもう少し調べてみると、
①まずクライアント側、つまり署名を要求する側が-queryで署名要求ファイルを生成し、
②次にタイムスタンプ局が-replyで署名済みファイルを生成し、
③再びクライアント側が署名済みファイルの検証を行うようだ。
ということは、②の部分だけpythonで実装できればよいのではないか?

RFC3161を実装しているpython用ライブラリはないのか?

TimestampについてはRFC3136に定義されているようだが、それに準拠したpythonライブラリがこれといって見つからない。さっと出てこないということは需要がない。ということか・・・

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1