Яагаад openssl команд ажиллаж байхад VPN-ийн бүтээц бүтэлгүйтдэг
Ажиллаж буй openssl binary нь толгой файл, холболтын сангийн талаар юу ч хэлэхгүй. Хөгжүүлэлтийн багц, зорилтот архитектур, бүтээцийн илрүүлэх логыг шалгана уу.
Терминал OpenSSL-ийн хувилбарыг баяртайгаар мэдээлдэг ч эх кодын мод шифрлэлтийн толгой файл байхгүй гэсэн мессежтэйгээр бүтэлгүйтсээр байна. Хоёр мэдэгдэл нэгэн зэрэг үнэн, учир нь ажиллагааны хэрэгсэл болон бүтээцийн оролтын багц тусдаа нийлүүлэгддэг. Эдгээр дөрвөн шалгалтыг дарааллаар гүйцэтгэнэ үү: суулгасан багцууд, илрүүлэх гаралт, хайлтын зам, дараа нь эх код өөрөө нийцэж байгаа эсэх. Хуучин хамаарлын жагсаалт наахаас илүүтэйгээр бүтэлгүйтлийг тайлбарлаж буй эхний шалгалт дээр зогсоно уу.
Ажиллагааны орчин ба бүтээцийн оролт нь өөр өөр багц
Түгээлт OpenSSL-ийг хуваалцсан сан болон командын мөрийн хэрэгслийг өгдөг ажиллагааны багц, мөн толгой файл, хувилбаргүй холболтын нэр, pkg-config метадата өгдөг хөгжүүлэлтийн багц болгон хуваадаг. Эхнийхийг суулгах нь хоёр дахьыг суулгахгүй бөгөөд хөрвүүлэгчид зөвхөн хоёр дахь хэрэгтэй.
Суулгасан гэж санаж байгаа зүйлээс илүүтэйгээр үнэхээр юу байгааг шалгана уу. Debian-д суурилсан системд хөгжүүлэлтийн багц ихэвчлэн libssl-dev байдаг бол ажиллагааны орчин нь хувилбартай сангийн багц дээр openssl binary нэмэгддэг.
dpkg -l | grep -E 'libssl-dev|libssl3|openssl' pkg-config --modversion openssl openssl version
Эхний команд гурвын алиныг суулгасныг харуулна, хоёр дахь нь бүтээцийн систем pkg-config-оор олох хувилбарыг мэдээлнэ, гурав дахь нь ажиллагааны хувилбарыг мэдээлнэ. Эхний гаралтад дутуу мөр байвал алдааг тэр даруй тайлбарлана. Хоёр, гурав дахь хоорондын хувилбарын зөрүү нь өөр асуудал бөгөөд ихэвчлэн хоёр суулгалт өрсөлдөж байгааг илэрхийлнэ.
Бүтээцийн өөрийн илрүүлэх гаралтыг уншина уу
Ихэнх бүтэлгүйтэл тохиргооны логт харагддаг, хэрэв та товчлолын өмнө уншвал. CMake-ийн FindOpenSSL модуль аль include хавтас болон аль санг олсноо мэдээлдэг бөгөөд шаардлагатай бүрэлдэхүүн байхгүй үед тодорхой мессежтэйгээр бүтэлгүйтдэг.
Төсөл аль модулийн хувилбарыг ашиглаж байгааг баталгаажуулна уу, учир нь эх кодын мод дотор багцлагдсан хуулбар нь суулгасан CMake-тай ирдэг хуулбараас өөрөөр ажиллаж болно. Дараа нь бүрэлдэхүүний жагсаалтыг уншина уу: зөвхөн Crypto хүсдэг төсөлд SSL сан хэрэггүй, харин SSL хүсдэг төсөл хөгжүүлэлтийн багцын зөвхөн нэг хэсэг байвал бүтэлгүйтнэ.
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release grep -i -E 'openssl|ssl' build/CMakeCache.txt
Эхний команд тэгээс дахин тохируулна, хоёр дахь нь модулийн тогтсон ямар ч үндсэн хавтас эсвэл сангийн замыг оролцуулан кэшлэсэн үр дүнг харуулна. Хэрэв кэш өмнөх оролдлогын хуучин угтвар руу зааж байвал утгыг гараар засахын оронд бүтээцийн хавтсыг устгаад дахин тохируулна уу. Хуучирсан кэшийн бичлэгүүд нь зөв засварын дараа ч үлддэг бүтэлгүйтлийн нийтлэг шалтгаан юм.
Бүтээцийг зөв суулгалт руу нарийн чиглүүлнэ үү
Зөвшөөрөгдсөн OpenSSL анхдагч хайлтын замаас гадуур байвал FindOpenSSL OPENSSL_ROOT_DIR-ийг яг тэр бүтээцэд зориулсан сануулга болгон баримтжуулдаг. Unix төстэй системд pkg-config-оос ч асуудаг тул тохирох PKG_CONFIG_PATH дэлхийн хэмжээнд юу ч өөрчлөхгүйгээр тус болно.
cmake -S . -B build -DOPENSSL_ROOT_DIR=/opt/openssl-3.2 -DCMAKE_BUILD_TYPE=Release ldd build/vpn_client | grep -i ssl
Эхний команд сануулгыг нэг бүтээцийн хавтаст хязгаарлаж, хоёр дахь нь үүссэн binary ажиллагааны үед ямар хуваалцсан санг ачаалж байгааг харуулна. Зориулсан угтвартай холбогдсон бүтээц ба өөрийг нь ачаалдаг binary нь ажиллагааны замын асуудал бөгөөд илрүүлэх асуудал биш бөгөөд өөр нэг тохиргооны туг биш rpath эсвэл ачаалагчийн тохиргооны шийдвэр шаарддаг.
Эдгээр сонголтыг бүтээцийн дотор л байлгана уу. Нэг төслийг хангахын тулд системийн санг солих эсвэл глобал pkg-config файлыг засах нь ажиллаж буй ширээний компьютер эвдэрсэн болох зам юм. Угтварыг бүртгэдэг бүтээцийн хавтас давтагдах боломжтой; бүх машин даяарх өөрчлөлт нь дараагийн төслийг хүлээж буй дэмжлэгийн тохиолдол юм. Сануулгыг солих үед бүтээцийн хавтсыг устгана уу, кэш хуучин хариуг хадгалж чадахгүйн тулд.
Асуудал эх код дотор байгааг мэдээрэй
Амжилттай тохиргооны алхам нь шалгалтууд дууссан гэдгийг л батална. Хөрвүүлэлт эх кодын хүлээж буй API-г үгүйсгэж болно, холболт дутуу тэмдэгтийн улмаас бүтэлгүйтэж болно. Үе шат бүрийн эхний тодорхой алдааг хадгална уу, учир нь дараагийнх нь ихэвчлэн үр дагавар.
OpenSSL 3 хуучин VPN клиентүүд шууд ашигладаг хэд хэдэн интерфейсийг хуучирсан гэж зарлаж устгасан тул тэр үеийн эх кодын мод шинэ include зам биш бодит өөрчлөлт шаардаж болно. Хэрэв засварлагчид одоогийн хувилбарыг дэмждэг бол түүнийг ашиглана уу. Хэрэв дэмжихгүй бол шийдвэр нь үйлчилгээг эзэмшигчид хамаарах бөгөөд хуучин сангийн файлын нэр хайх биш.
Нэмэлт ширээний компьютер компонентүүд өөрсдийн шаардлагатай. Цэвэр тохируулагддаг командын мөрийн зорилт нь GUI хэрэгслийн багц болон засварлагч бүтэх эсэх талаар юу ч хэлдэггүй тул хуучин Qt багцын жагсаалтыг тодорхойлолт биш түүх гэж үзнэ үү. Аль интерфейс анхдагчаар идэвхтэй байгааг эх кодын хувилбарын өөрийн сонголтоос шалгана уу. Дараа нь зөвхөн хэрэгтэй зүйлээ бүтээнэ үү, учир нь нэмэлт хамаарал бүр болохыг хүлээж буй өөр нэг илрүүлэх асуудал юм.