Терминал OpenSSL версиясын кубаныч менен билдирет, ал эми баштапкы код дарагы жок крипто аталыштары жөнүндө билдирүү менен дагы эле ийгиликсиз болот. Эки билдирүү тең бир убакта туура, анткени аткаруу убактысынын куралы жана куруу киргизүүлөрүнүн жыйындысы өзүнчө жеткирилет. Бул төрт текшерүүнү тартиби менен аткарыңыз: орнотулган пакеттер, табуу чыгарылышы, издөө жолдору, анан баштапкы код өзү шайкеш келеби. Эски көз карандылыктардын тизмесин чаптоонун ордуна ийгиликсиздикти түшүндүргөн биринчи текшерүүдө токтоңуз.

Аткаруу убактысы жана куруу киргизүүлөрү ар башка пакеттер

Дистрибутив OpenSSLди жалпы китепкана менен буйрук сабынын куралын берген аткаруу пакетине жана аталыштарды, версиясыз байлоо аттарын жана pkg-config метаберилиштерин берген иштетүү пакетине бөлөт. Биринчисин орнотуу экинчисин орнотпойт, ал эми компиляторго экинчиси гана керек.

Орнотконуңузду эстегениңиздин ордуна чындап эмне бар экенин текшериңиз. Debian негизиндеги системаларда иштетүү пакети адатта libssl-dev, ал эми аткаруу убактысы версияланган китепкана пакети жана openssl бинардыгы.

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

Биринчи буйрук белгини бир куруу каталогу менен чектейт, экинчиси алынган бинардык аткаруу убагында кайсы жалпы китепкананы жүктөөрүн көрсөтөт. Көздөлгөн префикске байланган куруу жана башкасын жүктөгөн бинардык — аткаруу жолунун маселеси, табуу маселеси эмес, жана ал дагы бир конфигурация желегин эмес, rpath же жүктөгүчтүн конфигурациясы боюнча чечимди талап кылат.

Бул тандоолорду куруунун ичинде жергиликтүү кармаңыз. Бир долбоорду канааттандыруу үчүн системалык китепканаларды алмаштыруу же глобалдык pkg-config файлдарын оңдоо — иштеген иш тактасын бузулганга айландырган жол. Префиксти жазган куруу каталогу кайталануучу; бүтүндөй машине боюнча өзгөртүү — кийинки долбоорду күткөн колдоо окуясы. Белгини өзгөрткөндө куруу каталогун өчүрүңүз, кэш эски жоопту сактай албашы үчүн.

Маселе баштапкы коддо экенин билиңиз

Ийгиликтүү конфигурация кадамы текшерүүлөр бүткөнүн гана далилдейт. Компиляция баштапкы код күткөн APIни дагы эле четке кагышы мүмкүн, ал эми байлоо жок символ себебинен дагы эле ийгиликсиз болушу мүмкүн. Ар бир баскычтын биринчи так катасын сактаңыз, анткени кийинкилери адатта кесепеттер.

OpenSSL 3 эски VPN кардарлары түздөн-түз колдонгон бир нече интерфейсти эскирген деп жарыялап, алып салды, ошондуктан ошол доордогу баштапкы код дарагына жаңы include жолунан тышкары чыныгы өзгөртүүлөр керек болушу мүмкүн. Эгер тейлөөчүлөр азыркы чыгарылышты колдосо, ошону колдонуңуз. Эгер жок болсо, чечим кызматка ээ болгон адамга таандык, эски китепкана файлынын атын издөөгө эмес.

Милдеттүү эмес иш тактасынын компоненттеринин да өз талаптары бар. Таза конфигурацияланган буйрук сабынын максаты GUI куралдар топтому жана редактор курулабы же жокпу жөнүндө эч нерсе айтпайт, ошондуктан эски Qt пакеттер тизмесин спецификация катары эмес, тарых катары кабыл алыңыз. Кайсы интерфейстер демейки боюнча күйгүзүлгөнүн баштапкы код ревизиясынын өз параметрлеринен текшериңиз. Анан керектүү нерсени гана куруңуз, анткени ар бир милдеттүү эмес көз карандылык — болушун күткөн дагы бир табуу маселеси.

Тектеш макалалар