/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 패키지는 종속성(= 심볼릭 링크 없음)으로 인해 제거할 수 없습니다. 그렇다면 두 가지를 공존시키고 /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.)에 있는 모든 라이브러리 중 하나입니다.

답변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.

또한 우리가 사용할 수 있는 또 다른 환경 변수는 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"

관련 정보