Wincrypt a libReSSL Od SSL po TLS - GoTo RetroCode

Je skutočne dosť ľahké napísať klienta HTTP/1. Ak sa zaobídete bez funkcií, ako sú proxy alebo keep-alive, jednoducho otvoríte port, odošlete svoj GET riadok a prázdny riadok, počkáte na odpoveď, prečítate si hlavičku až po prázdny riadok a za ním dáta na stiahnutie, super, hotovo.

retrocode

Je len hlúposť, že dnes sa takmer všetko prenáša v šifrovanej podobe cez HTTPS, teda cez tunel SSL/TLS.

a nie je také ľahké sa realizovať. Potrebujete k tomu pomoc.

Našťastie v súčasnosti existuje niekoľko knižníc, ktoré vás môžu zbaviť šifrovania. Ale v komerčných projektoch sa človek rád stretne s požiadavkou nepoužívať open source kód copyleft.

V systéme Windows sa potom môžete popasovať s rozhraním Windows Crypto API.
A ak je povolený OS POSIX, vždy používam libReSSL, upravenú vidličku staršieho projektu OpenSSL.

Len pripomienka:
Všetko to začalo titulom „Secure Socket Layer“, skrátene SSL, ktorého existenciou bola verzia 1 a 2, ktoré však rýchlo padli, pretože v nich vznikala neistota. SSL 3 trval dlho a krátko nato prišiel SSL 3.1, ktorý bol premenovaný na TLS (Transport Layer Security) 1.0.
Technológia sa potom rozširovala a rozširovala pod názvom TLS a v roku 2018 sa dosiahol najnovší stav techniky pomocou protokolu TLS 1.3.
Bezpečnostné problémy s protokolom SSL 3, ktoré sa tiež uznávajú v posledných rokoch, majú za následok deaktiváciu protokolu SSL 3 na všetkých serveroch dnes a dnes sa prakticky nepoužíva nič pod protokolom TLS 1.2.

WinCrypt

Nepríjemnou vecou na Crypto-API je jeho všeobecný prístup, ktorý by bol skutočne skvelý, keby bol iba lepšie zdokumentovaný. Trvalo mi teda večnosť, kým som konečne zistil, ako nad ním implementovať pripojenia SSL/TLS.

Tu uvádzam skrátka moju cestu pre jednoduchých klientov SSL:

OpenSSL a libReSSL

OpenSSL API, ktoré je k dispozícii aj v libReSSL, umožňuje priame použitie zásuviek, ale tento variant sa mi nepáči, pretože nemáte pod kontrolou komunikačnú vrstvu a nemožno ju integrovať do existujúcich komunikačných ovládačov.

Preto idem cestou cez vyrovnávacie pamäte dátových tokov dát. Vrstva SSL/TLS číta a zapisuje vaše údaje do týchto vyrovnávacích pamätí a potom ich môžeme odovzdať požadovanej komunikačnej vrstve (napr. TCP/IP).

Táto metóda je obzvlášť užitočná pri implementácii asynchrónnej komunikácie.
A funguje to takto:

Záver

Uf, môj nedávny exkurz cez SSL API sa stal takmer malým návodom. Samozrejme, k téme „Cielené používanie certifikátov“ stále chýba veľa. Ak vás ale zaujíma iba šifrovanie, a nie autentifikácia pripojenia, môžete s ním napísať malého klienta.