ข้อผิดพลาดขณะโหลดไลบรารีที่แชร์: libcrypto.so.1.1


13

เมื่อฉันเรียกใช้ "openssl" ฉันได้รับข้อผิดพลาดดังนี้:

openssl: ข้อผิดพลาดขณะโหลดไลบรารีที่แชร์: libcrypto.so.1.1: ไม่สามารถเปิดไฟล์วัตถุที่แชร์: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว "

สิ่งนี้เกิดขึ้นหลังจากฉันพยายามอัพเดต OpenSSL ตามบทความนี้

มีวิธีแก้ไขไหม

ระบบปฏิบัติการ: CentOS 6.8 เว็บเซิร์ฟเวอร์: nginx / 1.10.2

อัปเดต # 1:

[root@host ~]# yum info openssl
Installed Packages
Name        : openssl
Arch        : x86_64
Version     : 1.0.1e
Release     : 48.el6_8.3
Size        : 4.0 M
Repo        : installed
From repo   : system-updates
Summary     : A general purpose cryptography library with TLS implementation
URL         : ***
License     : OpenSSL
Description : The OpenSSL toolkit provides support for secure communications
            : between machines. OpenSSL includes a certificate management tool and
            : shared libraries which provide various cryptographic algorithms and
            : protocols.

Available Packages
Name        : openssl
Arch        : i686
Version     : 1.0.1e
Release     : 48.el6_8.3
Size        : 1.5 M
Repo        : system-updates
Summary     : A general purpose cryptography library with TLS implementation
URL         : ***
License     : OpenSSL
Description : The OpenSSL toolkit provides support for secure communications
            : between machines. OpenSSL includes a certificate management tool and
            : shared libraries which provide various cryptographic algorithms and
            : protocols.

2
ขออภัยคุณพบกับบทเรียนอินเทอร์เน็ตที่ไม่ดีอีกรายการหนึ่ง คุณอาจต้องติดตั้งระบบใหม่ ก่อนจะไปไกลกว่านี้ฉันขอแนะนำให้คุณถามถึงปัญหาดั้งเดิมที่คุณพยายามแก้ไขด้วยการทำเช่นนี้ อาจมีวิธีที่ดีกว่าในการบรรลุเป้าหมายดั้งเดิม
Michael Hampton

ฉันต้องการติดตั้งแอปพลิเคชันการตรวจสอบเซิร์ฟเวอร์ที่จัดทำโดย Monitis มันต้องการการพึ่งพาไลบรารีที่ใช้ร่วมกันซึ่งไม่ได้ติดตั้งในเซิร์ฟเวอร์ของฉัน ดังนั้นทั้งหมดนี้เกิดขึ้นเมื่อถึงการติดตั้งเหล่านั้น :(
mayasl

@MichaelHampton โปรดบอกบางสิ่งบางอย่างยกเว้นการติดตั้งระบบอีกครั้ง เนื่องจากไซต์สดทำงานบนเซิร์ฟเวอร์นั้น!
mayasl

คำตอบ:


20

ผมมีปัญหาเดียวกันหลังจากติดตั้งรุ่นล่าสุดของ OpenSSL 1.1.0c ผมแก้ไขปัญหาการคัดลอกไฟล์ห้องสมุดlibcrypto.so.1.1, libcrypto.aและlibssl.soจากไปยังห้องสมุดหุ้นที่/usr/local/lib64 หลังจากคัดลอกไลบรารี่แล้วคุณต้องสร้างลิงค์สัญลักษณ์/usr/lib64

ln -s libcrypto.so.1.1 libcrypto.so
ln -s libssl.so.1.1 libssl.so

หลังจากสร้างลิงก์สัญลักษณ์การสร้างแคช ldconfig ใหม่ก็จำเป็นเช่นกัน:

sudo ldconfig

8

ด้วย OpenSSL เวอร์ชันดั้งเดิมของคุณจะรู้วิธีการค้นหา libs ที่ใช้ร่วมกันเพราะ/usr/lib64รวมอยู่ในเส้นทางการค้นหาของลิงเกอร์ เมื่อคุณดาวน์โหลดและรวบรวมสำเนาของ "local" ของ OpenSSL libs ที่ใช้ร่วมกันจะถูกวางไว้/usr/local/lib64ตามค่าเริ่มต้น ดังนั้นคุณอาจต้องเพิ่มไดเรกทอรีนี้ลงในพา ธ การค้นหาของตัวลิงก์เช่นนี้ (เป็นรูท):

echo "/usr/local/lib64" > /etc/ld.so.conf.d/openssl.conf

จากนั้นดำเนินการ:

ldconfig

ฉันเชื่อว่านี่จะช่วยแก้ปัญหาของคุณได้


อย่างน้อยที่สุดการแจกจ่าย Ubuntu ที่ทันสมัย ​​(ฉันกำลังเขียนสิ่งนี้ใน 16.04 LTS) และอาจเป็นอย่างอื่นอาจsudo echo "/usr/local/lib64" > /etc/ld.so.conf.d/openssl.confส่งผลให้เกิดข้อผิดพลาด "การอนุญาตที่ถูกปฏิเสธ" เพราะคำสั่งครึ่งหลังของคำสั่ง หากสิ่งนี้เกิดขึ้นลองsudo sh -c "echo '/usr/local/lib64' >> /etc/ld.so.conf.d/openssl.conf"แทน
แมทธิวโคล

3

ฉันพบข้อผิดพลาดนี้โดยใช้ Termux บน ChromeOS ซึ่งทำให้โปรแกรมบรรทัดคำสั่งnpmและnodeขัดข้อง

วิ่งpkg upgradeแก้ไขปัญหา!


1

คุณสามารถติดตั้งใหม่โดยใช้

yum install -y openssl-devel


ฉันพยายามเช่นกัน แต่ก็ไม่ได้ช่วย!
mayasl

@mayasl บางทีคุณอาจต้องติดตั้งแพ็คเกจอื่นด้วยเช่นกัน ฉันคาดหวังว่าแพ็คเกจที่ถูกเรียกopenssl-develขึ้นอยู่กับแพ็คเกจที่ถูกเรียกopensslใช้ โปรดจำไว้ว่ามันเป็นเวลานานแล้วที่ฉันได้สัมผัสyumดังนั้นฉันจึงไม่สามารถตรวจสอบไวยากรณ์ของคำสั่งให้คุณได้
kasperd

ฉันได้อัปเดตคำถามของฉันด้วยผลลัพธ์ของ "yum info openssl" โปรดดูถ้าเป็นประโยชน์ ฉันลบและติดตั้ง openssl และ openssl-devel ใหม่ก่อนที่จะเริ่มกระทู้นี้ ใช้งานไม่ได้! คำสั่งที่ฉันใช้: codeyum remove openssl yum remove openssl-devel yum ล้างทั้งหมด
mayasl

การติดตั้งopensslใหม่ (ไม่ใช่openssl-devel) ควรเป็นการเริ่มต้นที่ดี
Michael Hampton

ฉันได้ลองแล้วว่า @MichaelHampton นี่คือปัญหาการเชื่อมโยงบางส่วนหรือไม่?
mayasl

1

สิ่งที่เบเนดิกต์ @ บอกว่าทำงานได้สำหรับฉัน อย่างไรก็ตามคุณอาจพบว่าบาง symlink ชี้ไปที่รุ่นเก่ากว่า การรันls -l libcrypto*จาก / usr / libs จะแสดงลิงค์ให้คุณเห็น ดังในตัวอย่างด้านล่าง:

lrwxrwxrwx 1 root root      16 May 21 15:28 libcrypto.so -> libcrypto.so.1.0

จากนั้นคุณต้องการลบลิงก์ที่มีอยู่ออกก่อนโดยพิมพ์sudo rm libcrypto.soแล้วคัดลอก libcrypto.so.1.1 ตามที่ @benedict พูดถึง ในที่สุดคุณสามารถสร้างลิงค์ใหม่ sudo ln -s libcrypto.so.1.1 libcrypto.so

หวังว่านี่จะช่วยได้


1

libcrypto.soเป็นopenssl-libsแพคเกจ ถ้าคุณบังคับให้ลบออก (กับ--nodeps) แพคเกจนี้หรือเสียหายโดยการอัพเกรดนั้นคุณจะไม่สามารถเข้าถึง yum, wget, ขด SSH ฯลฯ หากระบบมีการเข้าถึงอินเทอร์เน็ตดาวน์โหลดใช้คำสั่งopenssl-libs /usr/bin/GETไวยากรณ์จะมีลักษณะดังต่อไปนี้หากคุณพยายามกู้คืนเวอร์ชันopenssl-libs-1.0.2k-8.el7.x86_64:

/usr/bin/GET http://downloadURL/openssl-libs-1.0.2k-8.el7.x86_64.rpm > openssl-libs-1.0.2k-8.el7.x86_64.rpm

สิ่งนี้จะสร้างopenssl-libs-1.0.2k-8.el7.x86_64.rpmแพ็คเกจสำหรับคุณคุณสามารถใช้สิ่งนี้เพื่อติดตั้งใหม่หรือแตก.soไฟล์ที่หายไป


0

ฉันเจอปัญหาเดียวกันแล้ว ... ฉันแก้ไขมันด้วยการใช้คำสั่งต่อไปนี้

ln -s /usr/local/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so.1.1

นี่จะเป็นการสร้างลิงค์และคุณก็พร้อมที่จะไป


0

นี่เป็นทางออกที่ดีที่สุดที่ฉันได้พบ ... โซลูชั่นอื่น ๆ ที่มีให้ทางอินเทอร์เน็ตจะไม่สามารถรีบูตระบบได้)

ระบบปฏิบัติการ: Ubuntu 16.04

sudo vim /etc/ld.so.conf.d/libc.conf

ความคิดเห็นการตั้งค่าไดเรกทอรี lib และเพิ่มเส้นทางที่ดี

# libc default configuration

#/usr/local/lib

/usr/lib

เมื่อคุณแก้ไขเสร็จแล้วให้เรียกใช้คำสั่งนี้:

sudo ldconfig

จากนั้นคุณจะมีการตั้งค่าที่ดีเมื่อคุณเรียกใช้:

ldd / usr / bin / openssl

ก่อนการแก้ไขนี้:

 /usr/bin/openssl: /usr/local/lib/libssl.so.1.0.0: no version information available (required by /usr/bin/openssl)
/usr/bin/openssl: /usr/local/lib/libssl.so.1.0.0: no version information available (required by /usr/bin/openssl)
 /usr/bin/openssl: /usr/local/lib/libssl.so.1.0.0: no version information available (required by /usr/bin/openssl)
/usr/bin/openssl: /usr/local/lib/libcrypto.so.1.0.0: no version information available (required by /usr/bin/openssl)
/usr/bin/openssl: /usr/local/lib/libcrypto.so.1.0.0: no version information available (required by /usr/bin/openssl)
/usr/bin/openssl: /usr/local/lib/libcrypto.so.1.0.0: no version information available (required by /usr/bin/openssl)
/usr/bin/openssl: /usr/local/lib/libcrypto.so.1.0.0: no version information available (required by /usr/bin/openssl)
linux-vdso.so.1 =>  (0x00007ffe6d1e3000)
libssl.so.1.0.0 => /usr/local/lib/libssl.so.1.0.0 (0x00007f8999827000)
libcrypto.so.1.0.0 => /usr/local/lib/libcrypto.so.1.0.0 (0x00007f89993ed000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8999023000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8998e1f000)
/lib64/ld-linux-x86-64.so.2 (0x00007f8999a97000)

หลังจากแก้ไขฉันให้:

linux-vdso.so.1 =>  (0x00007ffec39bc000)
libssl.so.1.0.0 => /lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007f7faad22000)
libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007f7faa8dd000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7faa513000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f7faa30f000)
/lib64/ld-linux-x86-64.so.2 (0x00007f7faaf8b000)

สำหรับคนที่มีเส้นทาง CentOS ฉันคิดว่าไฟล์ที่ดีคือ /etc/ld.so.conf;) เพื่อให้ชัดเจน
ZEROF

0

เมื่อวันที่ 7 CentOS อยู่ในlibssl.so.1.1/usr/local/ssl/lib

ดังนั้นฉันต้องเพิ่มพา ธ นี้ไปยังตำแหน่งเริ่มต้นซึ่งตัวโหลดแบบไดนามิกมองหาไลบรารี ฉันสร้างไฟล์แยกต่างหากสำหรับ binary openssl ของฉันชื่อopenssl-1.1.1c.confใน/etc/ld.so.conf.dโฟลเดอร์:

echo "/usr/local/ssl/lib" > /etc/ld.so.conf.d/openssl-1.1.1c.conf

ตอนนี้มันใช้งานได้


-1

หลังจากสร้างและติดตั้ง open ssl openssl-1.1.0f ฉันแก้ไขข้อผิดพลาดเดียวกันสำหรับ lib libssl.so.1.1 การสร้างลิงค์นุ่ม:

ln -s /usr/local/lib/libssl.so.1.1 /usr/lib/libssl.so.1.1

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.