Testing django over HTTPS with runserver

Django does not have a test server that supports HTTPS. But it is incredibly easy to create an HTTPS server that proxies to django test server, The tool to do this is stunnel.

To install on Arch Linux run pacman -S stunnel. I have not tested this on Ubuntu but apt-get install stunnel4 should do the trick.

Next you need to create a private key and certificate. The following command will do this in one step.

$ openssl req -x509 -newkey rsa:2048 -keyout /etc/stunnel/stunnel.key -out /etc/stunnel/stunnel.pem -days 365 -nodes
			

Now you need to create a settings file, it can be named anything you like. In this example I have used https.cfg. We will setup the https proxy to accept connections on port 8080 and forward them to the default django test server port 8000. The other settings set a few defaults, like running the proxy in the foreground and setting the ssl version.


	$ vim https.cfg
	pid =
	cert=/etc/stunnel/stunnel.pem
	key=/etc/stunnel/stunnel.key
	sslVersion = SSLv3
	foreground = yes
	[https] 
	accept=8080
	connect=8000
	TIMEOUTclose=1
			

Finally you will start the proxy and django test server then you can navigate to https://localhost:8080

$ stunnel https.cfg
				$ HTTPS=on python manage.py runserver
			

That is all there is to it.