我有一個用Python 3.5的asyncio庫實現的自定義TCP服務器。我還使用Lets加密證書進行與服務器通信的SSL加密。讓加密只頒發有效期爲90天的證書,並且很有可能我的服務器不會在比此更長的時間內重新啓動。長時間運行Asyncio服務器,重新加載證書
我產生的SSLContext這樣的:
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
ssl_context.load_cert_chain(certfile='path/to/cert', keyfile='path/to/key')
而且這樣的服務器:
server = asyncio.streams.start_server(self._accept_client, ip, port, loop=self.loop, ssl=ssl_context)
證書過期後,現有連接繼續起作用,但新的連接將(正確)失敗。顯然,SSLContext
或服務器本身會將證書和密鑰文件加載到內存中,因爲更新磁盤上的文件不能解決問題。
我已經讀了很多Python文檔,發現沒有提到的解決方案。我有一個想法是嘗試定期撥打ssl_context.load_cert_chain()
,希望這會更新證書和密鑰。我不能看看load_cert_chain
函數的來源,以確定它的行爲,因爲它顯然是用C語言編寫的,並且文檔沒有指定在上下文傳遞給服務器後調用此函數的行爲。
有沒有辦法在運行時更新在SSLContext
中加載的證書和密鑰文件,而不必完全停止並重新啓動服務器?