2014-10-27 34 views
1

我正在Python 2.7.8下開發。那裏的_ssl.pyd是用OpenSSL 1.0.1h構建的。爲什麼pyOpenSSL有獨立的OpenSSL DLL副本?

但是,我也有pyOpenSSL 0.10(我知道,舊版本),以滿足所需的依賴。 pyOpenSSL包含libeay32.dll和ssleay32.dll 0.9.8o版本。

這是怎麼回事?是否因爲pyOpenSSL提供了OpenSSL庫的直接接口?

回答

1

Python可以使用OpenSSL支持進行編譯,這對於像TLS/SSL(https://docs.python.org/3.4/library/ssl.html)或urllib這樣的內部庫是必需的。 內部Python ssl庫通過套接字實現SSL協議。例如,urllib將其用於https協議。

pyOpenSSL是另一個Python庫,你可以在Pypi上找到。它的創建是爲了提供對OpenSSL lib的全面支持,因爲內部的Python SSL模塊仍然沒有涵蓋所有功能。

因此,它不是Python內部庫的一部分。它通過openssl庫實現高級接口。您必須在Python範圍之外進行編譯/安裝。 因此,它可以使用Python使用的openssl庫以外的其他版本進行編譯。

更多,在Windows上,您將使用二進制包進行安裝,因此提供了已編譯的OpenSSL dll;所以它們可能與安裝在系統上或Python上的不同。

是的pyOpenSLL的直接接口到OpenSSL庫。測試腳本在快速查看版本0.14源文件時也執行openssl命令行工具,但不執行lib的Python文件。

希望它可以幫助。

+0

好吧 - 如果我的Python應用程序中有一個運行類似CherryPy的Web服務器,並且它正在執行HTTPS,它使用的是哪個OpenSSL庫? Python鏈接到的那個,還是pyOpenSSL正在使用的那個? – Dave 2014-10-31 20:22:37

+0

它使用它正在使用的Python TLS庫使用的任何一個。根據http://cherrypy.readthedocs.org/en/latest/deploy.html#ssl-support CherryPy可以使用*內置的TLS庫或它可以使用pyOpenSSL - 取決於您的配置。 – 2015-01-22 11:47:07