OpenSSLを使用せずにPythonでCSRを生成しようとしています。誰かが正しい方向を指すことができれば、私は非常に感謝しています。
4 に答える
コマンドラインopenssl自体を使用したくないと仮定し、Python libで問題ありません。
これは、CSR を作成するために作成したヘルパー関数です。生成されたキー ペアと CSR から秘密キーを返します。関数は pyOpenSSL.crypto に依存します。
def create_csr(self, common_name, country=None, state=None, city=None,
organization=None, organizational_unit=None,
email_address=None):
"""
Args:
common_name (str).
country (str).
state (str).
city (str).
organization (str).
organizational_unit (str).
email_address (str).
Returns:
(str, str). Tuple containing private key and certificate
signing request (PEM).
"""
key = OpenSSL.crypto.PKey()
key.generate_key(OpenSSL.crypto.TYPE_RSA, 2048)
req = OpenSSL.crypto.X509Req()
req.get_subject().CN = common_name
if country:
req.get_subject().C = country
if state:
req.get_subject().ST = state
if city:
req.get_subject().L = city
if organization:
req.get_subject().O = organization
if organizational_unit:
req.get_subject().OU = organizational_unit
if email_address:
req.get_subject().emailAddress = email_address
req.set_pubkey(key)
req.sign(key, 'sha256')
private_key = OpenSSL.crypto.dump_privatekey(
OpenSSL.crypto.FILETYPE_PEM, key)
csr = OpenSSL.crypto.dump_certificate_request(
OpenSSL.crypto.FILETYPE_PEM, req)
return private_key, csr
OpenSSL に依存していますが、 m2cryptoは解決策になる可能性があります ( contrib の例の CreateX509Request を参照)。
Mozilla の NSS ライブラリを使用するpython-nssを使用することもできます。ごく最近追加されました。Web サイトで現在利用できる API ドキュメントは最新ではありませんが、新しいバージョンのいくつかの指針を以下に示します。nss.nss.CertificateRequest
- http://koji.fedoraproject.org/koji/packageinfo?packageID=6444
- http://koji.fedoraproject.org/koji/buildinfo?buildID=185589
それはCVSにもあります:
:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot/mozilla/security/python/nss
ここ数日、PyCrypto と PyASN1 を使用して CSR ジェネレーターの実装を開始しました。最初のコードはhttps://github.com/jandd/python-pkiutilsで入手できます
他の言語と同様に、Pythonはアルゴリズムを実装するだけです。暗号化についてはほとんど何も知りませんが、Pythonでこれを実装する必要がある場合は、CSRの実装方法に関する仕様を探します。
グーグルとウィキペディアを介して私はこのRFCを見つけました。あなたの仕事はこれをPythonで実装することです。
個人的には、おそらく最初にコマンドラインツールを使用しようとします(system()
Pythonからの必要がある場合は、関数の呼び出しを介して)。