选项-no-engine会导致Android的OpenSSL构建出现问题

时间:2015-01-07 16:46:10

标签: android openssl arm debian

我必须按照http://wiki.openssl.org/index.php/Android上Debian 7系统上的说明为Android构建OpenSSL 1.0.1j库。

我的配置选项是

./Configure dist -no-ssl2 -no-ssl3 -no-comp -no-hw -no-engine

由于错误

,构建失败
make[2]: *** No rule to make target `../../include/openssl/engine.h', needed by `rsa_lib.o'. 

(备注:使用linux-generic64代替dist没有任何区别)

提供选项-no-rsa会导致dsa_lib.o投诉。它 禁用RSA和DSA也没有意义,是吗?

我在这里阅读了NEWS文件http://wiki.openssl.org/和问题, 但无法找到解决方案。

有什么建议吗?

除此之外:-no-engine的实际含义是什么?根据我的理解, ENGINE是openssl的加密算法的接口。为什么要禁用它呢?

2 个答案:

答案 0 :(得分:2)

  

选项-no-engine导致Android的OpenSSL构建出现问题...
  ./Configure dist -no-ssl2 -no-ssl3 -no-comp -no-hw -no-engine

您可以安全地省略no-engine选项。该选项用于减小二进制文件的大小。


  

-no-engine的实际含义是什么?根据我的理解,ENGINE是......

这是一个好点,我无法回答。但我可以说我已经在维基页面上使用了几年的程序,并且我知道当使用无引擎选项时,OpenSSL仍然有效(编译/链接/运行)。

也许1.0.1j的内容发生了变化。我没有升级(意思是我没有为Android和iOS构建1.0.1j)因为我对Downgrade SCSV不感兴趣以适应浏览器以及他们用SSLv3重试的不安全做法。


  

使用linux-generic64而不是dist没有区别......

交叉编译脚本(setenv-android.sh)设置Android NDK工具的路径 AND 它设置了一些关键的环境变量。其中,CROSS_COMPILE ANDROID_DEV是至关重要的。从setenv-android.sh的尾部开始:

# For the Android toolchain
# https://android.googlesource.com/platform/ndk/+/ics-mr0/docs/STANDALONE-TOOLCHAIN.html
export ANDROID_SYSROOT="$ANDROID_NDK_ROOT/platforms/$_ANDROID_API/$_ANDROID_ARCH"
export SYSROOT="$ANDROID_SYSROOT"
export NDK_SYSROOT="$ANDROID_SYSROOT"
export ANDROID_NDK_SYSROOT="$ANDROID_SYSROOT"
export ANDROID_API="$_ANDROID_API"

# CROSS_COMPILE and ANDROID_DEV are DFW (Don't Fiddle With). Its used by OpenSSL build system.
# export CROSS_COMPILE="arm-linux-androideabi-"
export ANDROID_DEV="$ANDROID_NDK_ROOT/platforms/$_ANDROID_API/$_ANDROID_ARCH/usr"
export HOSTCC=gcc

Android的配置通过SYSTEMARCH获取。 Android启动后,即会使用CROSS_COMPILEANDROID_DEV

由于环境变量,您需要做的只是configure no-ssl2 no-ssl3 ...

答案 1 :(得分:0)

使用engine.h构建OpenSSL时,未创建指向no-engine的符号链接。我刚刚添加了

(cd include/openssl ; ln -s ../../crypto/engine/engine.h .)

到我的构建过程。