Wincrypt и libReSSL От SSL към TLS - GoTo RetroCode

Всъщност е доста лесно да напишете HTTP/1 клиент. Ако можете да се справите без функции като прокси или поддържане на живо, просто отваряте порт, изпращате своя GET ред и празен ред, изчаквате отговора, четете заглавката до празния ред и зад това са данните за изтегляне, чудесно, готово.

goto

Просто е глупаво, че днес почти всичко се предава в криптирана форма през HTTPS, т.е. през SSL/TLS тунел.

и не е толкова лесно да се приложиш. За това се нуждаете от помощ.

За щастие сега има някои библиотеки, които могат да ви освободят от криптиране. Но в търговски проекти човек обича да попада на изискването да не използва copyleft отворен код.

След това под Windows можете да се забърквате с Windows Crypto API.
И ако е разрешена POSIX OS, винаги използвам libReSSL, подредената вилица на по-стария проект OpenSSL.

Просто напомняне:
Всичко започна със заглавието „Secure Socket Layer“, накратко SSL, от които имаше версия 1 и 2, които бързо отпаднаха, защото в него възникна несигурност. SSL 3 продължи дълго време и малко след това дойде SSL 3.1, който беше преименуван на TLS (Transport Layer Security) 1.0.
След това технологията беше разширена и разширена под името TLS, а през 2018 г. беше постигнато най-новото състояние на техниката с TLS 1.3.
Проблемите със сигурността със SSL 3, които също бяха признати през последните години, доведоха до дезактивиране на SSL 3 на всички сървъри днес и практически нищо под TLS 1.2 не се използва днес.

WinCrypt

Досадното при Crypto-API е неговият общ подход, който всъщност би бил страхотен, ако само беше по-добре документиран. Така че ми отне завинаги, за да разбера най-накрая как да реализирам SSL/TLS връзки над него.

Ето моя начин за прости SSL клиенти накратко:

OpenSSL и libReSSL

API на OpenSSL, който се предлага и в libReSSL, позволява директното използване на сокети, но не ми харесва този вариант, защото нямате комуникационен слой под контрол и той не може да бъде интегриран в съществуващите манипулатори на комуникация.

Следователно поемам по пътя на буфера за данни на потока памет. Слоят SSL/TLS чете и записва вашите данни в тези буфери и след това можем да ги предадем на желания комуникационен слой (например TCP/IP).

Този метод е особено полезен при внедряване на асинхронна комуникация.
И работи по следния начин:

Заключение

Фу, скорошната ми екскурзия по API на SSL почти се превърна в малък урок. Разбира се, все още много липсва по темата „Целенасочено използване на сертификати“. Но ако се интересувате само от криптирането, а не от удостоверяването на връзката, можете да напишете малък клиент с него.