1

この質問の指示に従って、Android用のopensslの共有ライブラリを構築することができました。

例えば

cd openssl-fips-2.0/
./config
make
make install

cd openssl-1.0.1c/
./config fips --with-fipsdir=/usr/local/ssl/fips-2.0/ shared
make depend
make

これにより、libcrypto.so.1.0.0およびlibssl.so.1.0.0が生成され、それらに対応するシンボリックリンクがlibcrypto.soおよびlibssl.soとして生成されます。

NDKビルドシステムはバージョン管理された共有ライブラリをサポートしていないため、シンボリックリンクを使用する必要がありました(PREBUILT_SHARED_LIBRARYを使用)。ただし、これを使用すると、ライブラリはlibcrypto.so.1.0.0およびlibssl.so.1.0.0ではなくlibcrypto.soおよびlibssl.soとしてデバイスに到達することになり、ライブラリの読み込みに失敗します。バージョン名のあるライブラリの場合。

リンクされた質問には、System.loadLibrary()ではなくSystem.load(libcrypto.so.1.0.0)を使用してライブラリをロードすることが記載されていますが、前述のように、ファイルがフルパスでも機能するようにすることはできませんでした。 libcrypto.soとしてデバイスにコピーされます。

誰かがこれを成功させましたか?

注:openssl-1.0.1c configとmakefilesを変更してlibcrypto.1.0.0.soを生成しようとしました(たとえば、ファイル名とsonameの拡張子の前のバージョン番号を使用)。これにより、以前の問題を回避できました。読み込みの問題。ただし、FIPS_module_mode_set(FIPS_R_FINGERPRINT_DOES_NOT_MATCH)を使用してFIPSモードをオンにしようとすると、エラーが発生します。

なぜそれが起こっているのかはまだわかりませんが、NDKが「不要な」ものを取り除いたことが原因である可能性があります(この質問を参照)...私はまだこれも調べていますが、誰かがこれに関する情報を持っている場合はよろしくお願いします。

4

1 に答える 1

2

問題を正しく特定しましょう。問題を引き起こすのはNDKビルドではない可能性が高く、静的ライブラリから共有ライブラリをビルドするときに未使用のエントリを削除するリンカーではありません。

まず第一に、Androidを再構築したり、少なくともルート化したりせずに、通常のAPKでFIPSモードを提供できるかどうかはわかりません(たとえば、 http: //gcn.com/articles/2010/12/23/android-fips-securityを参照してください)。 .aspx)。

a )フルパスを正しく指定し()、b)ファイルがそのパスに配信されるSystem.load()場合、バージョン管理された.soをロードするのに問題はありません。最初のテストでは、手動でアップロードして/ sdcard /にアップロードし、FIPSフィンガープリントがより適切になるかどうかを確認することをお勧めします。 System.load("/data/local/tmp/libssl.so.1.0.0")libcrypto.so.1.0.0libssl.so.1.0.0

/ sdcard /の場所で問題が発生した場合は、 / data /local/または/data/ local /tmp/を試してください。/ data / data / (パッケージ) /files/を使用することもできます。後者には1つの利点があります。それは、アプリがアンインストールされるときにシステムによって自動的に削除されることです。

バージョン管理された.so(のようなlibcrypto.so.1.0.0)をAPKの一部にするには、それをプロジェクトのアセットフォルダーにコピーします。そこからディスク上の指定された場所にコピーするのは、Javaコードの責任です。このJavaコードが正しくアップグレードとSDカードの交換を処理することを確認してください。

于 2012-09-08T21:39:26.177 に答える