この質問の指示に従って、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が「不要な」ものを取り除いたことが原因である可能性があります(この質問を参照)...私はまだこれも調べていますが、誰かがこれに関する情報を持っている場合はよろしくお願いします。