Python 3.5のasyncioライブラリで実装されたカスタムTCPサーバーがあります。私はまた、サーバーとの通信のSSL暗号化にLets Encrypt証明書を使用します。暗号化で90日間有効な証明書のみが発行され、サーバーがこれよりも長い間再起動されない可能性があります。長時間実行しているAsyncioサーバー、リロード証明書
私はこのようなSSLContextの生成しています:証明書の有効期限が切れると、既存の接続が機能し続けますが、新しい接続が(正確に)失敗し、
server = asyncio.streams.start_server(self._accept_client, ip, port, loop=self.loop, ssl=ssl_context)
:
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
ssl_context.load_cert_chain(certfile='path/to/cert', keyfile='path/to/key')
そして、このようなサーバー。明らかに、SSLContext
またはサーバー自体は、ディスク上のファイルを更新しても問題が解決されないため、証明書とキーファイルがメモリにロードされたままになっています。
私はPythonのドキュメントをかなり読んだことがあります。私が持っていた1つのアイデアは、定期的な間隔でssl_context.load_cert_chain()
を呼び出して、これがcertとkeyを更新することを期待することです。私は明らかにC言語で記述されているので、その動作を判断するためにload_cert_chain
関数のソースを見ることはできません。また、ドキュメントには、コンテキストがサーバに渡された後にこの関数を呼び出す動作が指定されていません。
サーバーを完全に停止して再起動することなく、実行時にSSLContext
にロードされた証明書とキーファイルを更新する方法はありますか?