2011-12-21 50 views
3

我收到以下錯誤,當我試圖讓從chroot監牢中的SSL連接中:OpenSSL的一個chroot

twisted.internet.error.ConnectionLost: Connection to the other side was lost in a non-clean fashion. 

我使用OpenSSL的0.9.6與pyopenssl使SSL連接,我在Linux上使用python 2.4的扭曲python庫(centos 5.5)。

經過一些故障排除後,我發現openssl失敗了,因爲它試圖讀取/ dev/random文件,並且由於chroot中沒有/ dev/random而失敗。我已經確認,如果我在chroot中創建一個/ dev/random文件,連接成功。

  • 我想過安裝其中包含我的chroot的,但我的應用程序裏面的/ dev /隨機文件的devfs文件系統,它的系統管理員必須在刪除的chroot的根而不需要先卸載所有的壞習慣。
  • 我想過在執行chroot之前從/ dev/random文件中讀取數據,但是我的當前設置是在我的二進制文件啓動之前調用chroot,並且改變chroot發生的位置將是一個太大的變化在應用程序中,我不確定何時或如何完成。
  • 我想過在我的chroot jail之外運行一個程序,它只是從/ dev/random讀取並寫入一個名爲/ jail/dev/random的命名文件管道,可以從chroot jail中訪問,但我不比如不得不爲了訪問一個隨機源而運行一個單獨的進程。此外,它似乎剛剛初始化openssl過於複雜。

如果我無法從我的程序訪問/ dev/random,那麼初始化openssl的正確方法是什麼?

+2

我不知道大多數應用程序如何在沒有devfs的chroot jail中執行。我敢打賭,會有一個名爲/ dev/null的文件,裏面有很多垃圾...... – 2011-12-21 14:46:40

回答

1

也許是更好的辦法是綁定貼裝設備文件如下:

# touch chroot/dev/random 
# mount --bind /dev/random chroot/dev/random 

和urandom相同。

3

你可以假冒隨機的openssl,例如,命令行openssl:

[[email protected] /]# openssl s_client -h 
usage: s_client args 
... 
-rand file:file:... 
... 

無論如何,openssl需要一個隨機性來源,它不能隨機隨機而不安全。維基百科:

爲了生成用於安全連接的會話密鑰, 客戶端加密的隨機數與服務器的公鑰和 將結果發送到服務器。只有服務器應該能夠使用其私鑰對其進行解密。

沒有隨機性的來源,SSL/TLS很容易被黑客入侵。

如果您擔心chroot/dev/可以刪除,爲什麼不創建chroot/dev/randomchroot/dev/urandom intead安裝整個dev?

[[email protected] /]# mknod /dev/random c 1 8 
[[email protected] /]# mknod /dev/urandom c 1 9 

哦,順便說一句,你也想複製系統的/etc/resolv.conf和其他可能的主機,服務,醚等..