手机安全对OpenSSL的依赖很高,值得大家深入研究。

我试着在MacBook Air编译OpenSSL库,并在iOS设备中使用。

系统配置:MacBook Pro, Mac OS X 10.7.3, 1.7 GHz Intel Core i5, 4GB 1333 MHz DDR3,

安装了 Xcode 4.2.1, MacPorts 2.0.4 先这样编译下,下载openssl源代码包,如openssl-1.0.1b 在用户主目录创建 mkdir ssllibs 看看openssl支持哪些平台: ./Configure // 注意大写C

可以看到openssl支持:android、android-armv7、android-x86、iphoneos-cross等移动平台

./Configure darwin64-x86_64-cc –openssldir=/Users/<username>/openssl-1.0.1b

make & make test & make install

cd /Users/<username>/openssl-1.0.1b/bin ./openssl version OpenSSL 1.0.1b 26 Apr 2012 哈,编译成功。

因为所有的 iOS 设备都使用 ARM 架构处理器,iPhone4支持armv6, armv7指令集,所以在openssl-1.0.1b.tar.gz的目录下创建以下目录: mkdir openssl_armv6 openssl_armv7 openssl_i386

./configure BSD-generic32 –openssldir=/Users/<username>/openssl-1.0.1b/openssl_i386 vim makefile 将CC= gcc修改为 CC= /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc -arch i386

在CFLAG = 后面紧跟 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/

然后make & make install openssl_i386/lib目录下 生成 libcrypto.a 和 libssl.a ,编译成功。

先将编译好的 i386 库保存到 ssllibs 目录 mv openssl_i386 ssllibs/

同样的步骤编译 armv6, armv7

./configure BSD-generic32 –openssldir=/Users/<username>/openssl-1.0.1b/openssl_armv6

./configure BSD-generic32 –openssldir=/Users/<username>/openssl-1.0.1b/openssl_armv7

CC= /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2 -arch armv6

CC= /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2 -arch armv7 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/

make & make install

mv openssl_armv6 ssllibs/

mv openssl_armv7 ssllibs/

思路是这样的,但因为OpenSSL、Xcode、iOS的版本不同,可能会出现一些问题。

编译openssl-1.0.1c,

创建:openssl_arm 目录,修改Makefile

CC= /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/llvm-gcc

CFLAG= -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk

修改 crypto/ui/ui_openssl.c

static volatile sig_atomic_t intr_signal;

static volatile int intr_signal;

make, make install 成功,openssl_arm/lib 目录下生成:libcrypto.a libssl.a

现在,直接从 OpenSSL for iPhone 中获得OpenSSL和iPhone应用。

git clone https://github.com/x2on/OpenSSL-for-iPhone.git

cd OpenSSL-for-iPhone ./build-libssl.sh cd src/openssl-1.0.1b cat Makefile 你会看到以下信息: PLATFORM=BSD-generic32 CC= /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc -arch i386 CFLAG=-isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk…

你需要下载Xcode4.3的版本,因为我的Xcode4.2.1是iPhoneSimulator5.0.sdk 下载Xcode 4.3.2 for Lion.dmg(1.85 GB)

接下来,你就是make & make install

在Xcode中打开OpenSSL-for-iOS.xcodeproj 项目 把Xcode更新到4.3.2,Mac OS X更新到10.7.4 编译此项目出现错误:ld: library not found for -lcrypto clang: error: linker command failed with exit code 1 (use -v to see invocation)

把刚才编译好的libcrypto.a libssl.a 拷贝到 OpenSSL-for-iPhone/lib 目录下,重新编译,编译成功 🙂

参考资料:


发表评论

OpenID

电子邮件地址不会被公开。 必填项已用*标注

Anonymous

电子邮件地址不会被公开。 必填项已用*标注