実際、pyOpenSSL を使用できます。すでに CA ルート証明書と秘密鍵があり、CSR がクライアントから送信されると言っているように、crypto の機能を使用してファイルからそれらすべて (CA 証明書、秘密鍵、およびデバイス CSR) を読み取るか、管理して取得できます。それらをバッファに入れます。
以下の関数を使用して開始します。詳細dir(crypto) and crypto.function_name.__doc__
については、Python インタープリターを確認してください:) pyOpenSSL から暗号をインポートする必要があります
- crypto.load_certificate_request() - デバイス CSR obj を取得する
- crypto.load_privatekey() - CA 秘密鍵の秘密鍵 obj を取得する
- 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
ここで、caCert、deviceCsr、および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 の例
これにより、実装についてのアイデアが得られることを願っています