我發現了這個問題!我將嘗試解釋整個調試過程和解決方案。
引言:
當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