我有一个用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
中加载的证书和密钥文件,而不必完全停止并重新启动服务器?