7
votes

Création d'un serveur de proxy Java qui accepte HTTPS

J'ai déjà un serveur proxy HTTP de travail pouvant gérer plusieurs requêtes HTTP. Maintenant, mon problème est comment puis-je gérer la demande HTTPS?

Voici un code simplifié que j'utilise: xxx

et la clientHandler xxx

} < p> J'ai vraiment essayé d'essayer de chercher comment, j'ai rencontré le tunneling SSL, le certificat, la porte de main, le SSLSocket, SSLFactory, TrustTore et etc. quelque chose comme ça, mais ne pouvait toujours pas le faire fonctionner. Je dois juste savoir quelles sont les choses dont j'ai besoin et les étapes pour établir une connexion à un serveur Web activé par SSL.


4 commentaires

Veuillez lire le faq et Comment demander


Vérifiez Stackoverflow.com/questions/516323/... et Stackoverflow.com/questions/753191/ ... pour expliquer comment HTTPS sur "Proxy" fonctionne.


@JimGarrison Ohh tellement désolé pour ça .. Je ferai de mon mieux pour demander correctement la prochaine fois. juste besoin d'urgence une réponse.


@ Eugenemayevski'eldoscorp merci c'est tellement utile ..


3 Réponses :


-3
votes

Google "Server HTTPS en Java" et vous pouvez trouver un tutoriel pertinent , un RFC associé et Documentation standard . J'espère que cela aidera :).


2 commentaires

Bien que les liens puissent être intéressants pour une personne qui doit utiliser SSL à Java, c'est hors sujet ici. L'OP demande à un proxy HTTP pouvant gérer les demandes HTTPS: dans ce cas, le proxy lui-même n'a pas besoin de savoir quoi que ce soit sur le SSL du tout.


Cette question se présente pour cette recherche.



7
votes

Je l'ai enfin compris.

Je n'ai besoin que d'utiliser une prise normale et d'envoyer un message au client qu'une connexion est établie. Ensuite, passez au tunneling. p>

Voici un code de travail: P>

private Socket socket = null;
        private Socket remoteSocket = null;
        private HTTPReqHeader request = null;
        ClientHandler(Socket socket)
        {
           this.socket = socket;
           request = new HTTPReqHeader();
           request.parse(socket); // I read and parse the HTTP request here
        }

       public void run()
       {

            remoteSocket = new Socket(request.url,request.port);

            if(request.isSecure() )
            {
                 // send ok message to client
                 String ConnectResponse = "HTTP/1.0 200 Connection established\n" +
                                          "Proxy-agent: ProxyServer/1.0\n" +
                                          "\r\n";
                try
                {
           DataOutputStream out =  new DataOutputStream(socket.getOutputStream());
                   out.writeByte(ConnectResponse);
                    out.flush();
                } catch(Exception e) {} 

            }

            // start connecting remoteSocket and clientSocket 
            ...........
       }


2 commentaires

Le terminateur de ligne dans HTTP est défini comme \ r \ n, pas \ n.


Où est-ce que la classe httpreqheader vient? En outre, out.writebyte (ConnectResponse) ne fonctionne probablement pas car vous écrivez une chaîne, pas un octet. Veuillez mettre à jour votre réponse pour afficher un code de travail, idéalement un SSCCE , mentionnant également les dépendances externes (bibliothèques).



10
votes

Veuillez trouver ci-dessous le code Java pour créer un proxy HTTPS. Cela ne modifie pas la réponse. Pour l'intégrer avec le code http http écriture dans la clause d'autre. Vous pouvez trouver du code http pour proxy à plusieurs endroits.

En gros, ce qui se passe est lorsque le client envoie une demande HTTPS à proxy, il est livré avec Connect Keyword. Vous devez envoyer http / 1.1 200 OK au client après avoir établi la connexion avec UPSTREAM Server. Après cela, vous devez fournir le flux d'entrée entrant du client sans en-tête / hôte, etc. sur le serveur en amont et le flux entrant du serveur en amont au client.

Vous n'avez pas besoin de penser à SSL du tout. xxx


0 commentaires