Java Socks Proxy in Applets – Tor

This is an example of remotely loading an image from a Tor Hidden Service into a Java applet to display for a user not using the Tor Client.

Let’s start with the web server set up. This is where the applet and Tor Client/Privoxy will be hosted.

Step 1) With a web server of your choosing Apache, Nginx, PHP, install and configure a Tor Client and Privoxy Service on this web server. This is what our applet will use to access the image on the .onion service.

apt-get install tor
apt-get install privoxy

Edit /etc/privoxy/config add the following

forward-socks4a / localhost:9050 .

Also change the listen-address for privoxy to the webserver IP.


Step 2) Configure a Tor hidden web service on another system preferably another network and place an image that will be requested by the applet.

You will need the .onion domain address for the applet. See the Tor docs on configuring a Tor hidden service.

Step 3) On your development system compile and self sign the Java code (the code will be posted below).

Quick guide to self sign the code

jar cvf LoadImage.jar LoadImage.class
keytool -genkey -validity 3650 -keystore pKeyStore -alias keyName
keytool -selfcert -keystore pKeyStore -alias keyName -validity 3650
jarsigner -keystore pKeyStore LoadImage.jar keyName

Upload and embed the jar file in an html page on the web server. View the web page and accept any security issues that occur by self signed applets. You will likely need to approve the IP or Domain for the web server the applet will be hosted on in your JRE security settings. To do this on a windows system: Go To *Start Menu >> Java >> Configure Java >> Security >> Edit site list >> copy and paste your web server IP/Domain with http

import java.awt.Image;
import javax.imageio.*;
import javax.swing.ImageIcon;
import javax.swing.JApplet;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.Dimension;
import java.awt.image.BufferedImage;
import java.lang.*;

public class LoadImage extends JApplet 
	Image image;
	public LoadImage()
		try {	
			SocketAddress address = new InetSocketAddress("", 8118);
			Proxy proxy = new Proxy(Proxy.Type.HTTP, address);
			URL url = new URL("http://1234ABCD.onion/mabo/static/mountains.png");
			URLConnection conn = url.openConnection(proxy);
			InputStream inStream = conn.getInputStream();
                        BufferedImage image =;
			JLabel label = new JLabel(new ImageIcon(image));
			label.setMinimumSize(new Dimension(200, 200));
		catch (Exception e) {

The HTML code used to display the jarred applet

<applet archive="LoadImage.jar" codebase="http://tofolderwithapplet/cryaboutit/static/" code="LoadImage.class" width="420" height="280"></applet>


All articles from bottom(start) to top(end)