私は64ビットARM CPUとAES命令セットを備えたシングルボードコンピュータを持っています。提供されたDebian 8 Jessie Mate DesktopイメージはOpenSSLバージョン1.0.1kを使用しており、このアクセラレーションは使用できません。
アクセラレーションが有効なソースからOpenSSL 1.0.2nをビルドし、/usr/localにインストールしました。
この回答コマンドラインからアクセスする方法を説明しましたが、うまくいきますが、どうすればよいですか?すべてのプログラムとデーモンの強制実行この/usr/localバージョンを使用しますか?
元のOpenSSLパッケージは、依存関係(=シンボリックリンクなし)のため削除できません。それでは、2つを共存させ、/usr/localのいずれかを使用する正しい方法は何ですか?
注:私は/ usr / local OpenSSLを最新の状態に保つことが私の責任であることを理解しています。
答え1
アプリケーションがまだこの機能を使用していませんか?出力を調べると、ldconfig -v
どのOpenSSLライブラリが出力に最初に表示されますか?
デフォルトでは、Debianベースのシステム(および他のほとんどのFHS準拠のLinuxシステム)は次のものを/usr/local/lib
検索します。/usr/lib
しなければならないのバージョンより前に使用してください/usr/lib
。
ldd
OpenSSLに接続されたバイナリを使用してこれを確認できます。たとえば、
$ ldd /usr/sbin/nginx
...
libssl.so.1.1 => /usr/lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007fd50f80b000)
...
パスを書き留めますlibssl
。システムに複数のコピーがある場合でも、このバージョンが使用されます。
OpenSSLのカスタムバージョンが以下のディレクトリ/usr/local/lib
(たとえば/usr/local/lib/ssl
)にあり、見つからない場合は、ld
そのディレクトリを新しいファイルに追加し/etc/ld.so.conf.d
て再実行できます。定義された検索パス名が表示されるように、対応するldconfig
オプションを使用する必要があります。-v
.)のすべてのライブラリの1つです。
答え2
/usr/local
環境変数内のライブラリを強制的に使用するには、LD_LIBRARY_PATH
次のコマンドを使用できます。
export LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:/usr/lib
これは次のように確認できます。
ldd /usr/bin/target-application
ldd /usr/bin/target-application | grep ssl
export LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:/usr/lib
ldd /usr/bin/target-application
ldd /usr/bin/target-application | grep ssl
設定LD_LIBRARY_PATH
と確認が完了したら(同じシェルで)アプリケーションを起動したとき/usr/local
。
さらに、私たちが使用できるもう1つの環境変数は、ターゲットアプリケーションがLD_PRELOAD
まだ間違ったライブラリを使用しているかどうかです。
あるいは、ターゲットアプリケーションがソースからビルドされている場合は、ビルド中にターゲットライブラリにリンクすることもできます。以下は、インストールされているさまざまなOpensslバージョンのアプリケーションをビルドする方法の例です/usr/local
(これは、Openssl v1でPHPとOpenwall Johnを使用することです)。 .1.1x)
./configure --with-openssl=/usr/local CFLAGS=-I/usr/local/include
LDFLAGS=-L/usr/local/lib64 LIBS="-lpthread" \
OPENSSL_LIBS="-L/usr/local/lib64 -l:libssl.a -l:libcrypto.a -ldl -lpthread" \
OPENSSL_CFLAGS="-I/usr/local/include"