OpenSSL 0.9.8yをAndroid NDKでクロスコンパイルする
「OpenSSL: Source, Tarballs」から openssl-0.9.8y.tar.gz をダウンロードします。
$ tar xvzf openssl-0.9.8y.tar.gz $ cd openssl-0.9.8y $ CROSS_COMPILE=arm-linux-androideabi- ./Configure --prefix=$ANDROID_APP_ROOT/openssl-0.9.8y threads zlib shared no-asm linux-generic32 $ make -j8 $ make install
installed files
bin/c_rehash bin/openssl include/openssl/*.h lib/engines/lib4758cca.so lib/engines/libaep.so lib/engines/libatalla.so lib/engines/libcapi.so lib/engines/libchil.so lib/engines/libcswift.so lib/engines/libgmp.so lib/engines/libnuron.so lib/engines/libsureware.so lib/engines/libubsec.so lib/libcrypto.a lib/libcrypto.so lib/libcrypto.so.0.9.8 lib/libssl.a lib/libssl.so lib/libssl.so.0.9.8 lib/pkgconfig/libcrypto.pc lib/pkgconfig/libssl.pc lib/pkgconfig/openssl.pc ssl/man/man?/*.? ssl/misc/c_hash ssl/misc/c_info ssl/misc/c_issuer ssl/misc/c_name ssl/misc/CA.pl ssl/misc/CA.sh ssl/openssl.cnf
OpenSSL 0.9.8系をビルドする理由
最新のOpenSSL 1.0.1系ではなく古いバージョンをビルドする理由は、Android組み込みの証明書ストアを利用するためです。Android 4.0以降、 /system/etc/security/cacerts/ 以下にOpenSSL形式の証明書が0.9.8系の命名規則で置かれているのですが、これは1.0系のOpenSSLではうまく読めません。
ちなみに、Android 4.3組み込みの /system/lib/libssl.so はOpenSSL 1.0系ですので、これも使えません。Android組み込みの証明書ストアを利用したい場合は、古いOpenSSLを自前ビルドする以外に手がないというわけです。
Android 2系の場合、組み込みの証明書ストアはOpenSSL形式では無いようなので、OpenSSLを利用するなら証明書を独自のパスにインストールする必要があります。当然ですが、証明書を自前管理する場合は特にバージョンの縛りはありません。