12

私はPythonを初めて使用し、まだ学習しているので、私の質問は少し素朴かもしれません. 我慢してください;)

問題は、クライアントが CSR を送信することであり、CA ルート証明書で署名し、署名された証明書をクライアントに返したいと考えています。

このコマンドを使用して、コマンドラインを使用して実行しています

openssl x509 -req -in device.csr -CA root.pem -CAkey root.key -CAcreateserial -out device.crt -days 500

Pythonを使用して達成したいのと同じこと。openssl pyopensslのpythonライブラリに出くわしました

このライブラリを使用することは可能ですか? どのように ?それともM2Cryptoに行くべきですか?

4

2 に答える 2

18

実際、pyOpenSSL を使用できます。すでに CA ルート証明書と秘密鍵があり、CSR がクライアントから送信されると言っているように、crypto の機能を使用してファイルからそれらすべて (CA 証明書、秘密鍵、およびデバイス CSR) を読み取るか、管理して取得できます。それらをバッファに入れます。

以下の関数を使用して開始します。詳細dir(crypto) and crypto.function_name.__doc__については、Python インタープリターを確認してください:) pyOpenSSL から暗号をインポートする必要があります

  1. crypto.load_certificate_request() - デバイス CSR obj を取得する
  2. crypto.load_privatekey() - CA 秘密鍵の秘密鍵 obj を取得する
  3. crypto.load_certificate() - CA ルート証明書を取得する

次に、証明書を返す簡単な関数を書くことができます

def create_cert():
    cert = crypto.X509()
    cert.set_serial_number(serial_no)
    cert.gmtime_adj_notBefore(notBeforeVal)
    cert.gmtime_adj_notAfter(notAfterVal)
    cert.set_issuer(caCert.get_subject())
    cert.set_subject(deviceCsr.get_subject())
    cert.set_pubkey(deviceCsr.get_pubkey())
    cert.sign(CAprivatekey, digest)
    return cert

ここで、caCertdeviceCsr、およびCAprivatekeyは、上記の 3 つの関数の値です。crypto.dump_certificate(crypto.FILETYPE_PEM, cert)証明書が手元にあるので、選択したファイル名を使用してこれをファイルに書き込むことができます。

要件に応じて、この関数を変更できます。この後、openssl コマンドなどを使用して、生成されたデバイス証明書を CA ルート証明書で検証できます。openssl verify -CApath <CA cert path> <name of device cert file>

github からいくつかの例を確認することもできます。 M2Crypto の例pyOpenSSL の例

これにより、実装についてのアイデアが得られることを願っています

于 2014-04-16T19:37:06.617 に答える