概要
取得した SSL 証明書と鍵の検証を行う方法を紹介します
期限が切れていないと鍵との組み合わせが正しいかもチェックしてみたいと思います
環境
- Python 3.10.2
- cryptography 39.0.1
- pyOpenSSL 23.0.0
インストール
- pipenv install pyOpenSSL cryptography
サンプルコード
from datetime import datetime
import OpenSSL
import sys
# 証明書と鍵を読み込む
with open('./fullchain.pem', 'rb') as f:
cert_data = f.read()
with open('./privkey.pem', 'rb') as f:
key_data = f.read()
# フォーマットチェック
try:
cert = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, cert_data)
key = OpenSSL.crypto.load_privatekey(OpenSSL.crypto.FILETYPE_PEM, key_data)
except OpenSSL.crypto.Error as e:
print('PEMフォーマットではありません')
sys.exit(1)
# 有効期限の取得
bytes = cert.get_notAfter()
timestamp = bytes.decode('utf-8')
formatted_timestamp = datetime.strptime(timestamp, '%Y%m%d%H%M%S%z').date().isoformat()
print (f"有効期限は{formatted_timestamp}")
# 証明書と鍵のペアを検証する
context = OpenSSL.SSL.Context(OpenSSL.SSL.TLSv1_METHOD)
context.use_privatekey(key)
context.use_certificate(cert)
try:
context.check_privatekey()
print('証明書と鍵のペアは正しいです')
except OpenSSL.SSL.Error as e:
print('証明書と鍵のペアが正しくありません:', e)
ちょっと解説
フォーマットチェックは load_certificate
で読み込めたかどうかで判定します
エラーの場合はフォーマットエラーとして判断します
フォーマットが正しい場合は有効期限の取得を行います
最後に鍵とのペアチェックを証明書のコンテキストの check_privatekey
で行います
0 件のコメント:
コメントを投稿