2

Python と PyOpenSSL を使用して、カスタム拡張機能の値を取得する方法はありますか? カスタム拡張とは、 http://www.openssl.org/docs/apps/x509v3_config.htmlの ARBITRARY EXTENSIONS で説明されている任意の拡張形式を使用してエンコードされた拡張を意味します。

また、PyOpenSSL を使用してそのような拡張機能を含む証明書を作成することは可能ですか?

これらのいずれかに対する答えが「いいえ」の場合、他の Python ライブラリでこれを行う方法についてのポインタにも興味があります。OpenSSL コマンド ライン アプリへのシステム コールを実行したくありません。

4

2 に答える 2

9

pyOpenSSL を使用して読み込んだ X.509 証明書のすべての拡張機能を取得できます。例えば:

>>> from OpenSSL import crypto as c
>>> cert = c.load_certificate(c.FILETYPE_PEM, file('server.pem').read())
>>> cert.get_extension_count()
4L
>>> ext = cert.get_extension(0)
>>> ext.get_short_name()
'basicConstraints'
>>> ext.get_data()
'0\x00'
>>> 

データはそのままの形式で出力されます (おそらく特定の拡張子に応じて、ASN.1 の一部のエンコード)。

拡張機能を追加することもできます。

>>> newext = c.X509Extension('nsComment', 0, 'tacos are delicious')
>>> cert.add_extensions([newext])
>>> cert.get_extension_count()
5L
>>> cert.get_extension(4)
<X509Extension object at 0x7f74db7c2290>
>>> cert.get_extension(4).get_data()
'\x16\x13tacos are delicious'
>>> 

ただし、わずかな非対称性に注意してください。拡張データは文字列である必要があり、ASN.1 を使用して自動的にエンコードされます。これにより、任意の非文字列拡張データを追加する可能性が排除されるようです。

于 2012-01-15T14:29:10.157 に答える