PythonでOpenSSL(pyOpenSSL)を使いこなすための実践的な解説とサンプルコードを紹介します。この記事では、pyOpenSSLのインストール方法から鍵ペア生成、証明書作成、SSL/TLS通信まで幅広く取り扱い、初心者から中級者まで役立つ内容をまとめました。
pyOpenSSLとは
pyOpenSSLは、PythonからOpenSSLの機能を3利用できる強力なライブラリです。Python標準のsslモジュールよりも柔軟かつ高度な証明書管理やSSL/TLS通信が可能です。
pyOpenSSLのインストール方法
まずはインストールから始めましょう。コマンドラインで以下のコマンドを実行してください。
pip install pyopenssl
インストールが完了したら、Pythonでバージョンを確認します。
import OpenSSL
print(OpenSSL.__version__)
バージョンが表示されればインストール成功です。
鍵ペアの生成と保存
鍵ペア(秘密鍵・公開鍵)を生成し、ファイルに保存する方法です。
from OpenSSL import crypto
key = crypto.PKey()
key.generate_key(crypto.TYPE_RSA, 2048)
with open("private_key.pem", "wb") as f:
f.write(crypto.dump_privatekey(crypto.FILETYPE_PEM, key))
with open("public_key.pem", "wb") as f:
f.write(crypto.dump_publickey(crypto.FILETYPE_PEM, key))
print("鍵ペアの生成が完了しました。")
証明書の作成と管理
自己署名証明書を作成し、保存する例です。
from OpenSSL import crypto
key = crypto.PKey()
key.generate_key(crypto.TYPE_RSA, 2048)
cert = crypto.X509()
cert.get_subject().CN = "myserver"
cert.set_serial_number(1000)
cert.gmtime_adj_notBefore(0)
cert.gmtime_adj_notAfter(10*365*24*60*60)
cert.set_issuer(cert.get_subject())
cert.set_pubkey(key)
cert.sign(key, "sha256")
with open("self_signed_cert.pem", "wb") as f:
f.write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert))
証明書の読み込みと情報表示
証明書ファイルを読み込み、情報を表示する方法です。
from OpenSSL import crypto
with open("self_signed_cert.pem", "rb") as f:
cert_data = f.read()
cert = crypto.load_certificate(crypto.FILETYPE_PEM, cert_data)
print("発行者:", cert.get_issuer().CN)
print("主体者:", cert.get_subject().CN)
print("有効期限:", cert.get_notAfter().decode())
try:
crypto.X509Store().verify(cert, None)
print("証明書の署名は有効です。")
except crypto.X509StoreContextError:
print("証明書の署名が無効です。")
SSL/TLS通信の実装例
pyOpenSSLを使ったSSL/TLS通信のサンプルです。
from OpenSSL import SSL
import socket
context = SSL.Context(SSL.SSLv23_METHOD)
context.set_verify(SSL.VERIFY_PEER, lambda conn, cert, errnum, depth, ok: ok)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
conn = SSL.Connection(context, s)
conn.connect(('localhost', 8443))
conn.do_handshake()
conn.send(b"Hello, secure world!")
print(conn.recv(1024))
conn.shutdown()
conn.close()
print("SSLクライアントを終了します。")
応用:証明書から公開鍵を取り出す方法
証明書から公開鍵を抽出する方法です。
from OpenSSL import crypto
def get_pubkey(file_path):
with open(file_path, "rb") as f:
cert_data = f.read()
cert = crypto.load_certificate(crypto.FILETYPE_PEM, cert_data)
pubkey = crypto.dump_publickey(crypto.FILETYPE_PEM, cert.get_pubkey())
print(pubkey)
get_pubkey("self_signed_cert.pem")
まとめ
この記事では、PythonでOpenSSLを活用するための基本的な手順と応用例をまとめました。SEO対策として、見出しやキーワード、サンプルコードを活用し、視認性を高める工夫も意識しています。AIや画像生成ツールを活用することで、さらに記事の魅力を引き出すことができます。
コメント