Asio TLS హ్యాండ్షేక్ ప్రారంభించే ముందు CONNECT ఏర్పాటు చేయండి
సాధారణ HTTP ప్రాక్సీ మార్పిడి కోసం Asio SSL స్ట్రీమ్ యొక్క కింది పొరను ఉపయోగించి, తర్వాత అంగీకరించిన టన్నెల్ ద్వారా TLS ప్రారంభించండి.
సాధారణ HTTP ప్రాక్సీ ద్వారా ssl::stream<tcp::socket> కోసం మొదట దాని ముడి రవాణాను ఉపయోగించి, తర్వాత దానిని గమ్యస్థాన TLS చేయమని అడగండి:
auto& transport = tlsStream.next_layer();
- ఆ రవాణాను ప్రాక్సీ హోస్ట్ మరియు పోర్ట్కు కనెక్ట్ చేయండి. అనుమతించిన పబ్లిక్ HTTPS గమ్యానికి ప్రాక్సీ ఆధారాలు సెట్ చేయకపోతే, HTTP ప్రాక్సీ జాబితా అభ్యర్థి ఎండ్పాయింట్లను అందిస్తుంది; అభ్యర్థి కోరిన టన్నెల్ను అనుమతిస్తుందో లేదో తనిఖీ చేయండి.
- గమ్యం authority తెలిపి CONNECT పంపండి, ఉదాహరణకు
api.example:443, మరియు సాదా రవాణాపై పూర్తి ప్రతిస్పందన శీర్షికలను విశ్లేషించండి. విజయవంతమైన 2xx టన్నెల్ను తెరుస్తుంది; తిరస్కరణ HTTP ప్రాక్సీ ప్రతిస్పందనగానే ఉంటుంది. - గమ్య హోస్ట్నేమ్, అవసరమైన SNI, విశ్వాస మూలాలు మరియు peer ధృవీకరణను సెట్ చేసి, తర్వాత
tlsStreamపై క్లయింట్ హ్యాండ్షేక్ ప్రారంభించండి. - TLS విజయవంతమైన తర్వాత యాప్ కోసం SSL స్ట్రీమ్ ద్వారా చదవడం మరియు రాయడం ఉపయోగించండి. ఆ సమయంలో కింది పొరను నేరుగా చదవడం TLS ప్రాసెసింగ్ను దాటవేస్తుంది.
HTTP పార్సర్ మిగిలిన భాగాన్ని తదుపరి దశకు తీసుకెళ్లండి. Asioలో బఫర్ చేసిన హ్యాండ్షేక్ ఓవర్లోడ్లు ఉన్నాయి; పార్సర్కు చెందిన తోకను విసిరేయడం సాకెట్ నుండి ఇప్పటికే చదివిన బైట్లను కోల్పోవచ్చు.
ఈ సాధారణ రకంలో next_layer మరియు lowest_layer రెండూ TCP చేరుతాయి. ఎక్కువ ర్యాపర్లు వాటిని భిన్నంగా చేయవచ్చు, కాబట్టి ప్రాక్సీ యొక్క నిజమైన వైర్ ప్రోటోకాల్ను మోసే ఇంటర్ఫేస్ను ఎంచుకోండి. HTTPS ప్రాక్సీ మరో TLS దశను జోడిస్తుంది మరియు ఈ ప్లెయిన్టెక్స్ట్ CONNECT క్రమానికి వెలుపల ఉంటుంది.