1 min read

動的に証明書を生成できる HTTPS サーバー

自社ミドルウェアがウェブフック送信で利用している Erlang/OTP 標準の TLS ライブラリが、年 1 くらいで証明書周りの挙動が怪しくなることがありました。

そこで、自社ミドルウェアの E2E テスト時に、ウェブフック送信の通信部分を HTTPS を選択できるようにし、様々な証明書を動的に生成して自動でテストできるようにしました。

cryptography を利用した証明書の動的生成

cryptographyx509 を利用すれば簡単に生成できました。これで様々な証明書で検証が出来るようになりました。

aiohttp と ssl を利用した HTTPS サーバー

HTTP サーバーには aiohttp を利用しているのですが、これに Python 標準の ssl を利用して ssl.SSLContext を渡すだけで簡単に HTTPS 化できました。

SSLContext.load_cert_chain で証明書をパスでしか渡せないので tempfile を利用してみました。

pytest と httpx を利用した aiohttp の HTTPS テスト

aiohttp を HTTPS サーバとして起動して、httpx に ca cert を指定して HTTPS でアクセスできるかどうかを pytest で確認した仕組みを OSS (Apache-2.0) として以下に公開しています。

GitHub - voluntas/aiohttps
Contribute to voluntas/aiohttps development by creating an account on GitHub.