나는 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
.
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
.)에 있는 모든 라이브러리 중 하나입니다.
답변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"