PythonでOpenSSLを扱うためのライブラリとして、pyOpenSSL
があります。このライブラリはOpenSSLの一部を高レベルにラップしており、PythonのポータブルソケットのメソッドをラップするSSL.Connection
オブジェクトなどを含んでいます。
しかし、Python Cryptographic Authorityは、TLS接続以外の何かにpyOpenSSL
を使用している場合、cryptography
に移行し、pyOpenSSL
の依存関係を削除することを強く推奨しています。
cryptography
はOpenSSLをラップするPythonのモジュールで、OpenSSLでやりたいことすべてを扱うことができます。公開鍵暗号を扱うPythonコードを見ると、openssl
コマンドをsubprocess
モジュールで呼び出すケースが多いようです。しかし、毎回forkするコストがかかるので、大量に扱うときはモジュールを使う方が高速にできます。
以下に、cryptography
を使用して秘密鍵を生成するPythonコードの例を示します。
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.asymmetric import rsa, ec, ed25519
def generate_privkey(key_type = ''):
if key_type == 'ec' or key_type == 'ecdsa':
privkey = ec.generate_private_key(
ec.SECP256R1(),
default_backend()
)
elif key_type == 'ed25519':
privkey = ed25519.Ed25519PrivateKey.generate()
else:
privkey = rsa.generate_private_key(
public_exponent=65537,
key_size=2048,
backend=default_backend()
)
return privkey
このように、PythonとOpenSSLを組み合わせて使用することで、安全な通信やデータの暗号化など、様々な機能を実現することができます。.