【问题标题】:Android, build openssl-fips-2.0安卓,构建 openssl-fips-2.0
【发布时间】:2012-06-20 22:58:43
【问题描述】:

尝试使用 NDK 构建 openssl-fips-2.0,在我幸运地找到此链接并轻松完成之前。 https://github.com/guardianproject/openssl-android

现在尝试对最新的 openssl-fips-2.0 做同样的事情,从这里获取源代码: http://opensslfoundation.com/testing/validation-2.0/

我是否必须按照有关交叉编译的文档进行构建?更简单的方法?

提前致谢

【问题讨论】:

标签: android openssl android-ndk


【解决方案1】:

为什么?如果您必须修改构建脚本,则生成的模块将不符合 FIPS 标准,您肯定需要进行修改才能在 Android 上构建。

【讨论】:

  • 谢谢尼古拉。正如您所说,我正在寻找说明或任何现有的开源项目,这导致我使用 NDK 构建 openssl-fips-2.0 并输出 .so 供我使用。搜索了很多,确实找到了。
  • 再说一次,你为什么要这样做?如果您不能声称生成的二进制文件符合 FIPS,您不妨使用常规二进制文件。此外,除非您只使用 OpenSSL,否则您需要让整个 Android 加密堆栈符合 FIPS 标准,以便在您尝试满足的任何法规下都认为系统是安全的。
  • 再次感谢尼古拉。我理解您关于符合 FIPS 的所有声明。我不想从 openssl 修改任何构建脚本,只想拥有一个符合 FIPS 的 libcrypto.so 和适用于 android 的容器。我花了很多时间试图建立一个,但无法通过。某处有预建的吗?谢谢。
  • @brewphone 我也想做同样的事情。我的 android 项目需要 libcrypto.so 和 libssl.so。如何在 Android 上获得与 .so fips 兼容的成功?我尝试了您在下面 cmets 中提到的内容,但无法获取 .so 文件。
【解决方案2】:

如何使用 android-ndk-r8 在 Mac OS X 10.7 上构建 OpenSSL FIPS 2.0

  1. 安装 JDK、android-sdk、android-ndk

  2. 在 Mac 上安装 GCC

    Xcode\Preferences\Components\Command Line Tools\install.
    
  3. 构建环境设置:

    $ANDROID_NDK_HOME is my android-ndk folder
    export ANDROID_NDK=$ANDROID_NDK_HOME
    export FIPS_SIG=$PWD/util/incore
    export PATH="$ANDROID_NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin":$PATH
    export MACHINE=armv7l
    export RELEASE=2.6.32.GMU
    export SYSTEM=android
    export ARCH=arm
    export CROSS_COMPILE="arm-linux-androideabi-"
    export ANDROID_DEV="$ANDROID_NDK/platforms/android-14/arch-arm/usr" 
    export HOSTCC=gcc
    
  4. 构建 fips openssl 模块:

    gunzip -c openssl-fips-2.0.tar.gz | tar xf -
    cd openssl-fips-2.0/
    ./config
    make
    make install # copy files to /usr/local/ssl/
    
  5. 构建支持 fips 的 openssl 库 (.a)

    gunzip -c openssl-1.0.1c.tar.gz | tar xf -
    cd openssl-1.0.1c/
    ./config fips --with-fipslibdir=/usr/local/ssl/fips-2.0/lib/ 
    make depend
    make
    

给你。

【讨论】:

  • 如何修改它以使其生成 armv6 二进制文件?如果我将机器更改为 armv6 或 armv6l,那么 ./config 会失败,说它是未知的
  • ARMv6 不支持 FIPS 合规性。它支持 ARMv7 和 x86
  • 检查pic.dhe.ibm.com/infocenter/wrklight/v5r0m6/…。请参阅图表上方的部分
  • 我正在尝试使用 openssl-1.0.1f 版本进行构建,但出现错误。有任何想法吗? /Users/scoleman/android-ndk-r9d/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../ ../../arm-linux-androideabi/bin/ld: ../libcrypto.a(ec2_smpl.o): 在函数 EC_GF2m_simple_method:ec2_smpl.c(.text+0x0): 错误: 未定义引用 'fips_ec_gf2m_simple_method' collect2: ld 返回 1 退出状态 make[2]: *** [link_app.] 错误 1 ​​make[1]: *** [openssl] 错误 2 make: *** [build_apps] 错误 1
  • wiki.openssl.org/index.php/Compilation_and_Installation 找到了解决方案:如果您正在配置仅使用素数曲线 (openssl-fips-ecp-2.0.5.tar.gz) 的 FIPS 功能库,那么您必须不配置-ec2m:
【解决方案3】:

谢谢 Nikolay 和 brewphone。如果我能早点找到你的帖子,那就太好了。我已经设法为我的手机构建了 fips-openssl。我必须在 fipsld 脚本中添加一点 awk sn-p 才能使其正常工作。(openssl-fips-1.2.3)

brewphone,我有来自构建的 libcrypto.a 和 libssl.a,我静态链接它们以为我的应用程序创建一个库。这是最好的方法吗?

谢谢!

【讨论】:

  • 最好使用 libcyrpto.so 而不是 .a。因为您需要根据 fips openssl 用户手册将 makefile 中的 gcc 链接器(ld)替换为 fipsld。使用 libcrypto.so 完全遵守 FIPS 规则。只需使用
  • 最好使用 .so 而不是 .a。因为否则您需要按照 fips openssl 用户手册将 makefile 中的 gcc 链接器(ld)替换为 fipsld。这很难,我没有通过,在 FIPS_set_mode(1) 中失败了。使用 .so 完全遵守 FIPS 规则。只需使用 ./config fips shared --with-fipsdir=xxxxx 创建 openssl so 文件。这更容易!
  • @brewphone,谢谢。我尝试使用我构建的共享库,即 libcrypto.so.1.0.0 和 libssl.so.1.0.0。在此之后,我尝试使用单独的 Android.mk 将它们构建为预构建共享库。然后,我将它们与我的来源联系起来。我在使用这种方法时遇到了两个问题。首先,android 构建系统不会采用以版本结尾的共享库。所以我给他们改名了。显然,当我使用“System.loadLibrary”调用加载这些库时,它无法找到该库,因为它仍在寻找 libcrypto.so.1.0.0。我正在使用 fips-2.0 和 openssl-1.0.1
  • so 中的 gcc soname 是 "libcrypto.1.0.0",这在 Linux 世界中很常见,所以你不想改变它。创建一个名为“libcrypto.so”的符号链接,指向构建的真实 libcrypto.so.1.0.0。使用 System.load("libcrypto.so.1.0.0") 而不是 System.loadLibrary()。
【解决方案4】:

如果其他人遇到与我相同的问题,通过 brewphone 实现上述工作的关键(感谢您的洞察力)是将未剥离的库打包为内容,然后将它们复制到应用程序数据文件夹,之后 System.load("/data/data/myapp/files/libcrypto.so.1.0.0")System.load("/data/data/myapp/files/libssl.so.1.0.0") 成功了。

有趣的是,只是更改 makefile 以将版本号放在 .so 扩展名之前会导致指纹失败,即使 fips 内容没有被触及。

brewphone,如果您设法以另一种方式做到这一点,请告诉我 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    相关资源
    最近更新 更多