根据 Python 加密库的文档 [1],可以使用静态链接的 OpenSSL 构建自定义加密轮。我尝试使用使用 FIPS 对象模块构建的 OpenSSL 安装来执行此操作,并且能够成功构建轮子,但发现它没有 FIPS 功能(无法设置 FIPS_mode_set=1)。
我创建了一个可以重现相同结果的 Dockerfile。最后的 Python 代码应该显示“1”和“OpenSSL 1.0.2t-fips 10 Sep 2019”,但却显示“0”和“OpenSSL 1.0.2t 10 Sep 2019”(无-fips指定)。
令我困惑的是,当我调用openssl version我构建的 CLI 时,它正确地显示了带有后缀的版本-fips。因为,我猜测我在构建密码学的过程中犯了错误。
感谢这里的任何帮助!
FROM centos
# Install build dependencies
RUN yum groupinstall -y "Development Tools" && \
yum install -y python-devel libffi-devel
# Install Python dependencies
RUN curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && \
python get-pip.py && \
pip install virtualenv setuptools wheel pip
# Build Fips object …Run Code Online (Sandbox Code Playgroud) 我有一个用 C++ 编写的大型程序,我希望通过 Python 使其可用。我编写了一个 python 扩展来公开一个接口,python 代码可以通过该接口调用 C++ 函数。我遇到的问题是安装似乎很重要。
我能找到的所有文档似乎都表明我应该创建一个setup.py创建distutils.core.Extension. 在我发现的每个示例中,正在创建的 Extension 对象都有一个源文件列表,它会编译这些文件。如果我的代码是一两个文件,那就没问题了。不幸的是,它有几十个文件,我使用了许多相对复杂的 Visual Studio 构建设置。因此,至少可以说,通过列出 .c 文件来构建似乎具有挑战性。
我目前已将我的 Python 扩展配置为构建为 .dll 并链接到 python39.lib。我尝试将扩展名更改为 .pyd 并将文件包含在 manifest.in 中。创建 setup.py 并运行后,它创建了一个 .egg 文件,我验证该文件确实包含我创建的 .pyd。但是,安装后,当我将模块导入python时,模块完全为空(并且我验证了没有调用PyInit_[module]函数)。Python dll Extension Import说如果我将扩展名更改为 .pyd 并将文件放在 python 安装的 Dlls 目录中,我可以导入 dll。我遇到了两个问题。
首先,在我看来,它不是很容易分发。我想把它打包成一个 python 轮子,我不确定一个轮子是如何做到这一点的。第二个更有问题 - 它并不完全有效。它调用我的扩展程序的初始化函数,并且我已经在 WinDbg 中验证它正在返回一个 python 模块。然而,这是我总是从控制台得到的。
>>> import bluespawn
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
SystemError: initialization of bluespawn did not return …Run Code Online (Sandbox Code Playgroud) 我必须强调的PyCharm 社区版这也没有任何Django的集成(v 2016年3月2日在提问时间,但仍然有效).
我谷歌我的问题和(令人惊讶的是)我没有得到任何答案(当然我不排除可能有一些的可能性,但我只是错过了他们).
问题很简单,在PyCharm中,可以通过简单的鼠标右键单击(从上下文菜单中)运行(调试)单元测试(TestCase或其中一种方法),如下图所示:
不幸的是,这产生了一个例外:
Run Code Online (Sandbox Code Playgroud)Traceback (most recent call last): File "C:\Install\PyCharm Community Edition\2016.3.2\helpers\pycharm\utrunner.py", line 254, in <module> main() File "C:\Install\PyCharm Community Edition\2016.3.2\helpers\pycharm\utrunner.py", line 232, in main module = loadSource(a[0]) File "C:\Install\PyCharm Community Edition\2016.3.2\helpers\pycharm\utrunner.py", line 65, in loadSource module = imp.load_source(moduleName, fileName) File "E:\Work\Dev\Django\Tutorials\proj0\src\polls\tests.py", line 7, in <module> from polls.models import Question File "E:\Work\Dev\Django\Tutorials\proj0\src\polls\models.py", line 9, in <module> class Question(models.Model): File "E:\Work\Dev\Django\Tutorials\proj0\src\polls\models.py", line 10, …
我正在尝试使用 OpenSSL 在 Linux 上静态编译 Python 3.6。
我的构建发生在 dockerfile 中,但本质上是:
$ ./configure --prefix=/task/build --disable-shared LDFLAGS="-static"
$ make altinstall
Run Code Online (Sandbox Code Playgroud)
通过更新使其Modules/Setup.local看起来像:
*static*
# Socket module helper for SSL support; you must comment out the other
# socket line above, and possibly edit the SSL variable:
SSL=/usr/local/ssl
_ssl _ssl.c \
-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
-L$(SSL)/lib -lssl -lcrypto
Run Code Online (Sandbox Code Playgroud)
但是,在配置步骤中,我收到错误:
Step 9/14 : RUN ./configure --prefix=/task/build --disable-shared LDFLAGS="-static"
---> Running in cb79ee47052b
checking for git... found
checking build system type... x86_64-pc-linux-gnu
checking host …Run Code Online (Sandbox Code Playgroud) 我有一个 Python 应用程序,它与 Python 和 Libcrypto 以及 LibSSL 共享对象一起打包。该应用程序是使用 Openssl Fips Module 2.0 构建的。Python 的请求模块和 urllib3 在后台使用这些共享对象来发出 TLS 请求。
我在构建应用程序的环境中启用了OPENSSL_FIPS标志。现在,如果要检查共享对象是否在我将它们从开发环境中取出并放入另一台机器时启用了 fips 模式,我该怎么做?
如何检查 fips 模式是否启用?如果不是,我如何为这些共享对象启用 fips 模式?
可能有帮助的其他详细信息:
OpenSSL 版本:1.0.2h(从源代码构建)
Fips 模块:2.0.12(从源代码构建)
蟒蛇:3.6
操作系统:Ubuntu 16.04 LTS
如果需要任何其他详细信息,请告诉我。
谢谢!
python ×5
openssl ×3
c ×1
c++ ×1
compilation ×1
ctypes ×1
django ×1
fips ×1
linux ×1
pycharm ×1
python-3.x ×1
ssl ×1
unit-testing ×1
windows ×1