क्या प्रॉक्सी सर्वर पर HTTPS कनेक्शन होना संभव है? यदि हाँ, तो प्रॉक्सी सर्वर किस तरह की अनुमति देता है?
साथ दोहराए कैसे अपाचे HTTP क्लाइंट 4 के साथ जुराबें 5 प्रॉक्सी का उपयोग करने?
क्या प्रॉक्सी सर्वर पर HTTPS कनेक्शन होना संभव है? यदि हाँ, तो प्रॉक्सी सर्वर किस तरह की अनुमति देता है?
साथ दोहराए कैसे अपाचे HTTP क्लाइंट 4 के साथ जुराबें 5 प्रॉक्सी का उपयोग करने?
जवाबों:
TLS / SSL (HTTPS में S) इस बात की गारंटी देता है कि आपके और आपके द्वारा संपर्क किए जा रहे सर्वर के बीच कोई ईवेस्ड्रॉपर नहीं हैं, यानी कोई प्रॉक्सी नहीं है। आम तौर पर, आप CONNECT
प्रॉक्सी के माध्यम से एक टीसीपी कनेक्शन खोलने के लिए उपयोग करते हैं। इस स्थिति में, प्रॉक्सी किसी भी अनुरोध / प्रतिक्रियाओं को कैश करने, पढ़ने या संशोधित करने में सक्षम नहीं होगा, और इसलिए बेकार हो सकता है।
यदि आप चाहते हैं कि प्रॉक्सी सूचना पढ़ने में सक्षम हो, तो आप निम्नलिखित दृष्टिकोण अपना सकते हैं:
एक उदाहरण स्क्विड का एसएसएल बम्प है । इसी तरह, burp को ऐसा करने के लिए कॉन्फ़िगर किया जा सकता है । मिस्र के आईएसपी द्वारा कम-सौम्य संदर्भ में भी इसका उपयोग किया गया है ।
ध्यान दें कि आधुनिक वेबसाइट और ब्राउज़र HPKP या बिल्ट-इन सर्टिफिकेट पिंस को नियोजित कर सकते हैं जो इस दृष्टिकोण को पराजित करते हैं।
Unconditionally trusted
एक सीए प्रमाणपत्र को संदर्भित करता है। CA certs के पास डोमेन नहीं है। मैंने दो उदाहरणों के साथ उत्तर में संशोधन किया है जहां यह उपयोगकर्ता के लिए किसी भी अलर्ट के बिना अभ्यास करता है।
संक्षिप्त उत्तर है: यह संभव है, और विशेष HTTP प्रॉक्सी या SOCKS प्रॉक्सी के साथ किया जा सकता है।
सबसे पहले और सबसे पहले, HTTPS SSL / TLS का उपयोग करता है जो डिज़ाइन द्वारा असुरक्षित सुरक्षा पर एक सुरक्षित संचार चैनल की स्थापना करके एंड-टू-एंड सुरक्षा सुनिश्चित करता है। यदि HTTP प्रॉक्सी सामग्री को देखने में सक्षम है, तो यह एक मध्य-मध्य ईव्सड्रोपर है और यह SSL / TLS के लक्ष्य को पराजित करता है। अगर हम एक सादे HTTP प्रॉक्सी के माध्यम से प्रॉक्सी करना चाहते हैं तो कुछ चालें चलनी चाहिए।
चाल है, हम एक HTTP प्रॉक्सी को एक विशेष कमांड नाम के साथ एक टीसीपी प्रॉक्सी में बदलते हैं CONNECT
। सभी HTTP प्रॉक्सी इस सुविधा का समर्थन नहीं करते हैं लेकिन कई अब करते हैं। टीसीपी प्रॉक्सी HTTP सामग्री को स्पष्ट पाठ में स्थानांतरित नहीं किया जा सकता है, लेकिन यह आगे और पीछे पैकेटों की क्षमता को प्रभावित नहीं करता है। इस तरह, क्लाइंट और सर्वर प्रॉक्सी की मदद से एक-दूसरे से संवाद कर सकते हैं। यह HTTPS डेटा को प्रॉक्सी करने का सुरक्षित तरीका है।
ऐसा करने का एक असुरक्षित तरीका भी है, जिसमें HTTP प्रॉक्सी एक व्यक्ति-मध्य बन जाता है। यह क्लाइंट-आरंभ किए गए कनेक्शन को प्राप्त करता है, और फिर वास्तविक सर्वर के लिए एक और कनेक्शन शुरू करता है। एक अच्छी तरह से लागू एसएसएल / टीएलएस में, क्लाइंट को सूचित किया जाएगा कि प्रॉक्सी वास्तविक सर्वर नहीं है। तो क्लाइंट को काम करने के लिए चेतावनी को अनदेखा करके प्रॉक्सी पर भरोसा करना होगा। उसके बाद, प्रॉक्सी बस एक कनेक्शन से डेटा को डिक्रिप्ट करता है, पुन: प्रयास करता है और इसे दूसरे में फीड करता है।
अंत में, हम निश्चित रूप से HTTPS को SOCKS प्रॉक्सी के माध्यम से प्रॉक्सी कर सकते हैं , क्योंकि SOCKS प्रॉक्सी निचले स्तर पर काम करती है। आप टीसीपी और यूडीपी दोनों प्रॉक्सी के रूप में एक सॉक्स प्रॉक्सी सोच सकते हैं।
जहाँ तक मुझे याद है, आपको प्रॉक्सी पर एक HTTP कनेक्ट क्वेरी का उपयोग करने की आवश्यकता है। यह अनुरोध कनेक्शन को एक पारदर्शी टीसीपी / आईपी सुरंग में बदल देगा।
इसलिए आपको यह जानने की जरूरत है कि क्या प्रॉक्सी सर्वर आप इस प्रोटोकॉल का समर्थन करते हैं।
यदि यह अभी भी रुचि है, तो यहां एक समान प्रश्न का उत्तर दिया गया है: एचटीटीपीएस को एचटीटीपीएस प्रॉक्सी में परिवर्तित करें
प्रश्न के दूसरे भाग का उत्तर देने के लिए:
यदि हाँ, तो प्रॉक्सी सर्वर किस तरह की अनुमति देता है?
बॉक्स से बाहर, अधिकांश प्रॉक्सी सर्वर केवल 443 पोर्ट के लिए HTTPS कनेक्शन की अनुमति देने के लिए कॉन्फ़िगर किए जाएंगे, इसलिए कस्टम पोर्ट के साथ https URI काम करेंगे। यह प्रॉक्सी सर्वर के आधार पर आमतौर पर विन्यास योग्य है। उदाहरण के लिए स्क्विड और टाइनीप्रॉक्सी इसका समर्थन करते हैं।
यहाँ मेरा पूरा जावा कोड है जो SOCKS प्रॉक्सी का उपयोग करके HTTP और HTTPS दोनों अनुरोधों का समर्थन करता है।
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
import org.apache.http.HttpHost;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.protocol.HttpContext;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.util.EntityUtils;
import javax.net.ssl.SSLContext;
/**
* How to send a HTTP or HTTPS request via SOCKS proxy.
*/
public class ClientExecuteSOCKS {
public static void main(String[] args) throws Exception {
Registry<ConnectionSocketFactory> reg = RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", new MyHTTPConnectionSocketFactory())
.register("https", new MyHTTPSConnectionSocketFactory(SSLContexts.createSystemDefault
()))
.build();
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(reg);
try (CloseableHttpClient httpclient = HttpClients.custom()
.setConnectionManager(cm)
.build()) {
InetSocketAddress socksaddr = new InetSocketAddress("mysockshost", 1234);
HttpClientContext context = HttpClientContext.create();
context.setAttribute("socks.address", socksaddr);
HttpHost target = new HttpHost("www.example.com/", 80, "http");
HttpGet request = new HttpGet("/");
System.out.println("Executing request " + request + " to " + target + " via SOCKS " +
"proxy " + socksaddr);
try (CloseableHttpResponse response = httpclient.execute(target, request, context)) {
System.out.println("----------------------------------------");
System.out.println(response.getStatusLine());
System.out.println(EntityUtils.toString(response.getEntity(), StandardCharsets
.UTF_8));
}
}
}
static class MyHTTPConnectionSocketFactory extends PlainConnectionSocketFactory {
@Override
public Socket createSocket(final HttpContext context) throws IOException {
InetSocketAddress socksaddr = (InetSocketAddress) context.getAttribute("socks.address");
Proxy proxy = new Proxy(Proxy.Type.SOCKS, socksaddr);
return new Socket(proxy);
}
}
static class MyHTTPSConnectionSocketFactory extends SSLConnectionSocketFactory {
public MyHTTPSConnectionSocketFactory(final SSLContext sslContext) {
super(sslContext);
}
@Override
public Socket createSocket(final HttpContext context) throws IOException {
InetSocketAddress socksaddr = (InetSocketAddress) context.getAttribute("socks.address");
Proxy proxy = new Proxy(Proxy.Type.SOCKS, socksaddr);
return new Socket(proxy);
}
}
}
SSH (लिनक्स संस्करण) के माध्यम से HTTPS की सुरंग बनाना:
1) turn off using 443 on localhost
2) start tunneling as root: ssh -N login@proxy_server -L 443:target_ip:443
3) adding 127.0.0.1 target_domain.com to /etc/hosts
सब कुछ आप लोकलहोस्ट पर करते हैं। फिर:
target_domain.com is accessible from localhost browser.
मैंने कोशिश की थी
ssh -N -D 12345 login@proxy_server
localhost:12345
लेकिन जब भी मैं किसी https वेबसाइट से जुड़ने की कोशिश करता हूं, तो यह "असुरक्षित कनेक्शन" त्रुटि के कारण होता है।
का समाधान था
डिजिटल महासागर प्रलेखन से संदर्भ
वीपीओ के बिना सुरक्षित रूप से वेब ट्रैफिक को कैसे रूट करें SOCKS टनल का उपयोग
मुझे नहीं लगता कि "प्रॉक्सी सर्वर पर HTTPS कनेक्शन हैं" का अर्थ है प्रॉक्सी सर्वर का मैन-इन-द-मिडल अटैक टाइप। मुझे लगता है कि यह पूछ रहा है कि क्या कोई टीएलएस पर http प्रॉक्सी सर्वर से जुड़ सकता है। और जवाब है हाँ।
क्या प्रॉक्सी सर्वर पर HTTPS कनेक्शन होना संभव है?
हां, मेरा प्रश्न और उत्तर यहां देखें। HTTP प्रॉक्सी सर्वर केवल SwitchOmega में काम करता है
यदि हाँ, तो प्रॉक्सी सर्वर किस तरह की अनुमति देता है?
प्रॉक्सी सर्वर का प्रकार एसएसएल प्रमाणपत्रों को दर्शाता है, जैसे कि सामान्य वेबसाइटें कैसे करती हैं। लेकिन pac
एसएसएल पर प्रॉक्सी कनेक्शन को कॉन्फ़िगर करने के लिए आपको ब्रॉयर के लिए एक फ़ाइल की आवश्यकता है ।