/usr/localでOpenSSLを強制する方法

/usr/localでOpenSSLを強制する方法

私は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

lddOpenSSLに接続されたバイナリを使用してこれを確認できます。たとえば、

$ 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"

関連情報