我在尝试在 MIPS 设备上使用编译为 FIPS 能力 的 OpenSSL 共享库 (libcrypto) 时遇到问题。
我以下列方式(总结)交叉编译了 FIPS 对象模块和 OpenSSL 库:
export FIPS_SIG=<my_path>/incore
./config fips --with-fipsdir=<my_path>/fips-2.0
make depend
make
make install
我完成了所有需要的步骤,所以我能够编译和安装库。
当我尝试从链接 OpenSSL 库的应用程序运行 FIPS_mod_set(1) API 时出现问题。
FIPS 模式初始化失败收到此错误:
2010346568:error:2D06B06F:lib(45):func(107):reason(111):NA:0:
调试 FIPS 代码,我发现问题出在 FIPS_check_incore_fingerprint(void) 函数中:
检查 memcmp(FIPS_signature,sig,sizeof(FIPS_signature)) 失败。
深入调试我发现 FIPS_signature 值仍然是默认值,所以我怀疑 incore 脚本,由 fipsld 调用> 实用程序,未将指纹正确嵌入 OpenSSL 共享对象中。
如何检查 incore 脚本是否在共享对象中嵌入了指纹?
如何打印出预期的指纹?
我需要调整 incore 脚本吗? (我想这是不允许的)
你有什么建议吗?
非常感谢!
附注:我正在使用 x86 Linux 机器进行交叉编译。
最佳答案
我找到问题了!我将尝试解释整个调试过程和解决方案。
简介:
当 OpenSSL 配置为支持 FIPS 时,在编译过程中 Makefile 会调用实用程序 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 脚本 incore,用于将 FIPS 对象模块的预期指纹嵌入到 OpenSSL 共享对象中。通过 FIPS_SIG env 变量指定 incore 路径很重要,例如:
export FIPS_SIG=$PWD/opensslfips2.0/util/incore
调试:
调试 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 处找到生成的签名,因此我得出的结论是,共享对象在签名嵌入过程后由其他进程编辑。
解决方案:
我正在为 OpenSSL 数据包使用一个包 Makefile,格式如下:
$(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
正如所怀疑的那样,make build-shared 和 make do_linux-shared 命令导致以错误的方式更改共享对象。
注意 make 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
关于linux - 支持 FIPS 的 OpenSSL 交叉编译 : incore fingerprint issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42995572/
我不知道为什么,但是当我设置这个设置时它无法编译设置:static_cache_control,[:public,:max_age=>300]这是我得到的syntaxerror,unexpectedtASSOC,expecting']'(SyntaxError)set:static_cache_control,[:public,:max_age=>300]^我只想将“过期”header设置为css、javaascript和图像文件。谢谢。 最佳答案 我猜您使用的是Ruby1.8.7。Sinatra文档中显示的语法似乎是在Ruby1.
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
是否有适用于Ruby语言的.NETFramework编译器?我听说过DLR(动态语言运行时),这是否将使Ruby能够用于.NET开发? 最佳答案 IronRuby是Microsoft支持的项目,建立在动态语言运行时之上。 关于.net-是否有Ruby.NET编译器?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/199638/
我已经按照https://github.com/wayneeseguin/rvm#installation上的说明通过RVM安装了Ruby.有关信息,我有所有文件(readline-5.2.tar.gz、readline-6.2.tar.gz、ruby-1.9.3-p327.tar.bz2、rubygems-1.8.24.tgz、wayneeseguin-rvm-stable.tgz和yaml-0.1.4.tar.gz)在~/.rvm/archives目录中,我不想在任何目录中重新下载它们方式。当我这样做时:sudo/usr/bin/apt-getinstallbuild-essent
我的Ruby-on-Rails项目中有以下文件结构,用于规范:/spec/msd/serviceservice_spec.rb/support/my_modulerequests_stubs.rb我的request_stubs.rb有:moduleMyModule::RequestsStubsmodule_functiondeflist_clientsurl="dummysite.com/clients"stub_request(:get,url).to_return(status:200,body:"clientsbody")endend在我的service_spec.rb我有:re
Ruby是否支持(找不到更好的词)非转义(逐字)字符串?就像在C#中一样:@"c:\ProgramFiles\"...或者在Tcl中:{c:\ProgramFiles\} 最佳答案 是的,您需要在字符串前加上%前缀,然后是描述其类型的单个字符。你想要的是%q{c:\programfiles\}。镐书很好地涵盖了这一点here,部分是通用分隔输入。 关于ruby-Ruby是否支持逐字字符串?,我们在StackOverflow上找到一个类似的问题: https:/
关闭。这个问题是off-topic.它目前不接受答案。想改进这个问题吗?Updatethequestion所以它是on-topic用于堆栈溢出。关闭10年前。ImprovethisquestionLinux专家正在转向Mac(10.8)。因为我懒...我使用MacPorts安装MacVim。它似乎安装没有错误。我只需要mvim中的python、ruby和perl支持。$/opt/local/bin/mvim--version|egrep'patches|python|ruby|perl'Includedpatches:1-244,246-646+multi_lang-mzscheme+
我正在编写一个Rubygem,在我的代码中使用{key:'value'}哈希语法。我的测试都在1.9.x中通过,但我(可以理解)在1.8.7中得到syntaxerror,unexpected':',expecting')'。是否有支持1.8.x的最佳实践?我是否需要使用我们的老friend=>重写代码,还是有更好的策略? 最佳答案 我认为你运气不好,如果你想支持1.8,那么你必须使用=>。像往常一样,我会提到在1.9的某些情况下您必须使用=>:如果键不是一个符号。请记住,任何对象(符号、字符串、类、float……)都可以是Ruby哈
当我刚刚运行middleman时服务,all.css编译得很好,只包含对+box-shadow(none)的调用:/*line1,/home/yang/asdf/source/stylesheets/content.css.sass*/div{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}但是当我构建网站时,我得到了这个Sass/Compass错误:$middlemanbuildSlim::EmbeddedEngineisdeprecated,itiscalledSlim::EmbeddedinSlim2.0
Linux操作系统——网络配置与SSH远程安装完VMware与系统后,需要进行网络配置。第一个目标为进行SSH连接,可以从本机到VMware进行文件传送,首先需要进行网络配置。1.下载远程软件首先需要先下载安装一款远程软件:FinalShell或者xhell7FinalShellxhell7FinalShell下载:Windows下载http://www.hostbuf.com/downloads/finalshell_install.exemacOS下载http://www.hostbuf.com/downloads/finalshell_install.pkg2.配置CentOS网络安装好