作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Windows 10 机器上安装了 python 2.7.17。然后我想通过在 python 中运行以下命令来测试它的 openssl 版本:
import ssl
print ssl.OPENSSL_VERSION_INFO
(1, 0, 2, 20, 15)
我想升级到 1.1.1 版。
cffi==1.14.0
cryptography==2.8
enum34==1.1.6
ipaddress==1.0.23
pycparser==2.19
pyOpenSSL==19.1.0
six==1.14.0
C:\Users\assaf>python -m OpenSSL.debug
pyOpenSSL: 19.1.0
cryptography: 2.8
cffi: 1.14.0
cryptography's compiled against OpenSSL: OpenSSL 1.1.1d 10 Sep 2019
cryptography's linked OpenSSL: OpenSSL 1.1.1d 10 Sep 2019
Pythons's OpenSSL: OpenSSL 1.0.2t 10 Sep 2019
Python executable: C:\Python27\python.exe
Python version: 2.7.17 (v2.7.17:c2f86d86e6, Oct 19 2019, 21:01:17) [MSC v.1500 64 bit (AMD64)]
Platform: win32
sys.path: ['', 'C:\\WINDOWS\\SYSTEM32\\python27.zip', 'C:\\Python27\\DLLs', 'C:\\Python27\\lib', 'C:\\Python27\\lib\\plat-win', 'C:\\Python27\\lib\\lib-tk', 'C:\\Python27', 'C:\\Python27\\lib\\site-packages']
最佳答案
让 Python 2.7 为其 ssl
使用当前 OpenSSL 1.1.1d 版本的唯一方法模块是使用该版本的 OpenSSL 重建它。对于 *nix 平台,这并不难;它只涉及调整一些初始配置文件。在 macOS 上进行的快速测试表明,Python 2.7 源代码实际上与 OpenSSL 1.1.1d API 兼容,因此看起来很有希望。
然而,对于 Windows,使用 OpenSSL 1.1.1d 重建 Python 2.7 更加困难。这是因为构建系统依赖于微软的 msbuild
, 不像 make
那样容易调整基于 *nix 的构建系统。您可以在 Python's PCbuild
subdirectory 中查看相关的 Visual Studio 解决方案、项目和属性文件。 .
此外,OpenSSL 1.0.2 和 1.1.1 版本之间的差异在 Windows 上稍大一些,因为库名称也发生了变化,而在 *nix 版本中它们保持不变。
不过,对 Windows 的 Python 构建系统所需的修改并不太广泛。在做出此答案底部解释的更改后,我似乎能够实现您正在寻找的东西。实际的构建可以通过 Python 的 PCbuild
运行以下命令来完成。子目录:
> build --no-tkinter --no-bsddb -e "/p:PlatformToolset=v141"
> build --no-tkinter --no-bsddb -e -p x64 "/p:PlatformToolset=v141"
--no-
选项用于加快进程并专注于 OpenSSL 方面。
v141
代表 Visual Studio 2017,你需要在 Visual Studio shell 中才能工作。之后,以下内容重现了您的测试,显示了 OpenSSL 1.1.1d 与 Python 2.7.17 的使用:
> win32\python.exe
Python 2.7.17 (tags/v2.7.17-dirty:c2f86d86e6, Feb 20 2020, 01:04:36) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
>>> print ssl.OPENSSL_VERSION
OpenSSL 1.1.1d 10 Sep 2019
libeay
project从解决方案。这用于从源代码构建 OpenSSL 1.0.2,但它与 OpenSSL 1.1.1 不兼容。相反,该解决方案现在依赖于 cpython-bin-deps 中 Python 存储库提供的预构建 OpenSSL 1.1.1d 二进制文件。 .作为构建过程的一部分,您可以自己重新构建 OpenSSL,但需要进行更多修改。 get_externals.bat
用于从上述 cpython-bin-deps 存储库下载 OpenSSL 1.1.1d 预构建库的批处理脚本。 openssl.props
配置多个 _ssl
的属性文件和 _hashlib
项目设置,并对这些项目本身进行了一些更改。调整主要来自 v3.8.1
发布 Python,以链接新的 OpenSSL 库并正确设置包含路径。通过此修改,OpenSSL 不再像以前在 2.7.17 中那样静态链接,而是动态链接。 Modules/posixmodule.c
和 Modules/timemodule.c
类似于 this patch ,以允许使用 Visual Studio 2017 进行构建——与创建预构建 OpenSSL 二进制文件的版本相同。 v2.7.17
.您应该能够通过查看该分支
v2.7.17_ossl_1.1.1
来重现构建。并在
PCbuild
中运行构建命令正如刚才提到的。如果有足够多的人感兴趣,我可能会清理它并保留它。
关于python - 如何为 python 2.7 安装 openssl 1.1.1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60213767/
我是一名优秀的程序员,十分优秀!