我发现了这个问题!我将尝试解释整个调试过程和解决方案。
引言:
当OpenSSL的构成为FIPS能,生成文件调用实用程序编译过程中,fipsld,其中两个执行FIPS 对象模块的校验和生成新的HMAC -SHA-1摘要为应用程序的可执行文件(如官方OpenSSL的用户指南https://www.openssl.org/docs/fips/UserGuide-2.0.pdf中说明)
的fipsld命令要求CC和FIPSLD_CC设置环境变量, ,后者优先。
在Makefile中,你会发现这样的事情:
libcrypto$(SHLIB_EXT): libcrypto.a fips_premain_dso$(EXE_EXT)
@if [ "$(SHLIB_TARGET)" != "" ]; then \
if [ "$(FIPSCANLIB)" = "libcrypto" ]; then \
FIPSLD_LIBCRYPTO=libcrypto.a ; \
FIPSLD_CC="$(CC)"; CC=$(FIPSDIR)/bin/fipsld; \
export CC FIPSLD_CC FIPSLD_LIBCRYPTO; \
fi; \
$(MAKE) -e SHLIBDIRS=crypto CC="$${CC:-$(CC)}" build-shared && \
(touch -c fips_premain_dso$(EXE_EXT) || :); \
else \
echo "There's no support for shared libraries on this platform" >&2; \
exit 1; \
fi
然后,fipsld实用程序将调用一个shell脚本,堆芯,用来嵌入FIPS目标模块的预期指纹OpenSSL的共享对象。通过FIPS_SIG环境变量来指定堆内的路径是很重要的,如:
export FIPS_SIG=$PWD/opensslfips2.0/util/incore
调试:
调试堆芯脚本,我可以看到,该脚本试图嵌入签名成共享对象位于偏移量0x001EE6B0而共享对象内部的FIPS_signature符号位于不同的偏移量处,更具体的位于0x001F0630:
objdump -t libcrypto.so.1.0.0 | grep FIPS_signature
001f0630 g O .data 00000014 FIPS_signature
readelf -a libcrypto.so.1.0.0 | grep FIPS_signature
870: 001f0630 20 OBJECT GLOBAL DEFAULT 18 FIPS_signature
3925: 001f0630 20 OBJECT GLOBAL DEFAULT 18 FIPS_signature
此外倾倒共享对象我无法在偏移0x001EE6B0找到所生成的签名,所以我得出的结论是共享对象被该签名通过一些嵌入过程之后编辑其他过程。
SOLUTION:
我使用的包生成文件用于以下面的方式格式化的OpenSSL分组:
$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR)
<options>
all
$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR)
<options>
build-shared
rm $(PKG_BUILD_DIR)/libssl.so.*.*.*
$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR)
<options>
do_linux-shared
$(MAKE) -C $(PKG_BUILD_DIR)
<options>
install
作为怀疑,化妆积聚共享和化妆do_linux共享命令负责以错误的方式更改共享对象。
注意不要使用适当的环境变量来调用build-shared。
我改变了包的Makefile:
$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR)
<options>
all
$(MAKE) -C $(PKG_BUILD_DIR)
<options>
install
现在FIPS_check_incore_fingerprint(void)
函数成功,一切正常返回!
注:
以下指南适用于Android设备是非常有益的,找到妥善的解决办法。 https://wiki.openssl.org/index.php/FIPS_Library_and_Android
只是一个FYI ...只有一个MIPS平台已被验证。其采用TI TNETV1050处理器的VxWorks 6.8操作环境。另请参阅[OpenSSL FIPS 140-2安全策略2.0版。第9-10页](https://www.openssl.org/docs/fips/SecurityPolicy-2.0.pdf)。 – jww
[这里](https://stackoverflow.com/questions/35664412/unable-to-build-a-working-fips-capable-openssl-on-hp-ux)是一个问题,我问了一阵子之前,当我有一个相关的问题。出于调试的目的,你可以修改任何文件(我为_fips \ _premain.c_,_fips.c_,_fipsld_做过),但是在构建“官方”版本时,你不能改变任何东西(实际上有很多限制)。另外,请确保您的平台/体系结构对受支持。 – CristiFati
可能有用的问题缺少相当数量的信息。与其猜测潜在的问题,可能[OpenSSL FIPS对象模块2.0版用户指南](https://www.openssl.org/docs/fips/UserGuide-2.0.pdf)将是一个好的开始。 – jww