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, ਟਰੱਸਟ ਰੂਟ ਅਤੇ ਪੀਅਰ ਵੈਰੀਫਿਕੇਸ਼ਨ ਸੈੱਟ ਕਰੋ, ਫਿਰ
tlsStreamਉੱਤੇ ਕਲਾਇੰਟ ਹੈਂਡਸ਼ੇਕ ਸ਼ੁਰੂ ਕਰੋ। - TLS ਸਫਲ ਹੋਣ ਤੋਂ ਬਾਅਦ ਐਪ ਲਈ SSL ਸਟ੍ਰੀਮ ਰਾਹੀਂ ਪੜ੍ਹਨਾ ਅਤੇ ਲਿਖਣਾ ਵਰਤੋ। ਉਸ ਵੇਲੇ ਹੇਠਲੀ ਪਰਤ ਸਿੱਧੀ ਪੜ੍ਹਨਾ TLS ਪ੍ਰੋਸੈਸਿੰਗ ਨੂੰ ਬਾਈਪਾਸ ਕਰਦਾ ਹੈ।
HTTP ਪਾਰਸਰ ਦਾ ਕੋਈ ਵੀ ਬਚਿਆ ਹੋਇਆ ਹਿੱਸਾ ਅਗਲੇ ਪੜਾਅ ਵਿੱਚ ਲੈ ਜਾਓ। Asio ਵਿੱਚ ਬਫਰ ਵਾਲੇ ਹੈਂਡਸ਼ੇਕ ਓਵਰਲੋਡ ਹਨ; ਪਾਰਸਰ ਦੀ ਮਾਲਕੀ ਵਾਲੀ ਪੂਛ ਸੁੱਟਣ ਨਾਲ ਸਾਕਟ ਤੋਂ ਪਹਿਲਾਂ ਪੜ੍ਹੇ ਬਾਈਟ ਗੁੰਮ ਹੋ ਸਕਦੇ ਹਨ।
ਇਸ ਸਾਦੇ ਟਾਈਪ ਵਿੱਚ next_layer ਅਤੇ lowest_layer ਦੋਵੇਂ TCP ਤੱਕ ਪਹੁੰਚਦੇ ਹਨ। ਵੱਧ ਰੈਪਰ ਇਨ੍ਹਾਂ ਨੂੰ ਵੱਖਰਾ ਕਰ ਸਕਦੇ ਹਨ, ਇਸ ਲਈ ਉਹ ਇੰਟਰਫੇਸ ਚੁਣੋ ਜੋ ਪ੍ਰੌਕਸੀ ਦਾ ਅਸਲ ਵਾਇਰ ਪ੍ਰੋਟੋਕੋਲ ਲੈ ਕੇ ਚੱਲਦਾ ਹੈ। HTTPS ਪ੍ਰੌਕਸੀ ਇੱਕ ਹੋਰ TLS ਪੜਾਅ ਜੋੜਦੀ ਹੈ ਅਤੇ ਇਸ ਪਲੇਨਟੈਕਸਟ CONNECT ਲੜੀ ਤੋਂ ਬਾਹਰ ਹੈ।