当我尝试从 chroot 监狱中建立 ssl 连接时,出现以下错误:
twisted.internet.error.ConnectionLost: Connection to the other side was lost in a non-clean fashion.
我正在使用带有 pyopenssl 的 openssl 0.9.6 来建立 ssl 连接,并且我在 Linux (centos 5.5) 上使用了用于 python 2.4 的扭曲 python 库。
经过一些故障排除后,我发现 openssl 失败是因为它试图读取 /dev/random 文件,而它失败是因为 chroot 中没有 /dev/random。我已经确认,如果我在 chroot 中创建 /dev/random 文件,则连接成功。
- 我曾考虑在我的 chroot 中安装包含 /dev/random 文件的 devfs 文件系统,但我的应用程序及其系统管理员有一个坏习惯,即在不先卸载所有内容的情况下删除 chroot 的根目录。
- 我考虑过在执行 chroot 之前从 /dev/random 文件中读取,但我当前的设置是在我的二进制文件启动之前调用 chroot,并且更改 chroot 发生的位置将是应用程序中的一个太大的变化我不确定何时或如何完成。
- 我曾想过在我的 chroot 监狱之外运行一个程序,它只是从 /dev/random 读取并写入一个名为 /jail/dev/random 的命名文件管道,可以从 chroot 监狱内部访问,但我不喜欢必须运行一个单独的进程只是为了访问随机源。此外,仅初始化 openssl 似乎过于复杂。
如果我无法从我的程序访问 /dev/random,那么初始化 openssl 的正确方法是什么?