Wincrypt și libReSSL De la SSL la TLS - GoTo RetroCode

De fapt, este destul de ușor să scrieți un client HTTP/1. Dacă puteți face fără funcții cum ar fi proxy sau keep-alive, pur și simplu deschideți un port, trimiteți linia GET și o linie goală, așteptați răspunsul, citiți antetul până la linia goală și datele de descărcare sunt în spatele ei, minunat.

goto

Este doar o prostie că astăzi aproape totul este transmis în formă criptată prin HTTPS, adică printr-un tunel SSL/TLS.

și nu este atât de ușor să vă implementați. Ai nevoie de ajutor pentru asta.

Din fericire, există acum câteva biblioteci care vă pot scuti de criptare. Dar în proiectele comerciale, ne place să întâmpinăm cerința de a nu utiliza codul open source copyleft.

Sub Windows puteți apoi să vă deranjați cu API-ul Windows Crypto.
Și dacă este permis un sistem de operare POSIX, folosesc întotdeauna libReSSL, furculița ordonată a proiectului OpenSSL mai vechi.

Doar un memento:
Totul a început cu titlul „Secure Socket Layer”, pe scurt SSL, din care a existat o versiune 1 și 2, care au fost rapid renunțate, deoarece au apărut nesiguranțe în ea. SSL 3 a durat mult timp și la scurt timp a apărut SSL 3.1, care a fost redenumit TLS (Transport Layer Security) 1.0.
Tehnologia a fost apoi extinsă și extinsă sub denumirea TLS, iar în 2018 s-a realizat cea mai recentă tehnologie cu TLS 1.3.
Problemele de securitate cu SSL 3, care au fost recunoscute și în ultimii ani, au dus la dezactivarea SSL 3 pe toate serverele de astăzi și practic nu se folosește astăzi nimic sub TLS 1.2.

WinCrypt

Lucrul enervant al Crypto-API este abordarea generică, care ar fi de fapt grozavă dacă ar fi mai bine documentată. Așa că mi-a luat pentru totdeauna să-mi dau seama în cele din urmă cum să implementez conexiuni SSL/TLS peste ea.

Iată calea mea pentru clienții SSL simpli pe scurt:

OpenSSL și libReSSL

API-ul OpenSSL, care este disponibil și în libReSSL, permite utilizarea directă a soclurilor, dar nu îmi place această variantă deoarece nu aveți stratul de comunicare sub control și nu poate fi integrat în handlerele de comunicații existente.

Prin urmare, iau ruta tampon de date a fluxului de memorie. Stratul SSL/TLS citește și scrie datele dvs. în aceste buffere și le putem trece apoi la stratul de comunicare dorit (de ex. TCP/IP).

Această metodă este deosebit de utilă atunci când implementați o comunicare asincronă.
Și funcționează astfel:

Concluzie

Phew, recenta mea excursie API SSL a devenit aproape un mic tutorial. Desigur, lipsesc încă multe subiectul „Utilizarea țintită a certificatelor”. Dar dacă sunteți interesat doar de criptare și nu de autentificarea conexiunii, puteți scrie un mic client cu ea.