lunes 18 de agosto de 2008

Servidor Https en python

Bueno, la verdad que tenía que dejar el comentario, después de tanto buscar, al final encontré la forma de levantar un servidor web en python bajo https.

tlslite es la distribución de código que nos ayuda con esta tarea. Trae codigo de ejemplo, y además un certificado x509 y un private key de prueba.

Si vemos en el directorio test, ahi adentro encontraremos el archivo httpsserver.py, el cual trae un servidor https de ejemplo:

1 from SocketServer import *
2 from BaseHTTPServer import *
3 from SimpleHTTPServer import *
4 from tlslite.api import *
5
6 s = open("./serverX509Cert.pem").read()
7 x509 = X509()
8 x509.parse(s)
9 certChain = X509CertChain([x509])
10
11 s = open("./serverX509Key.pem").read()
12 privateKey = parsePEMKey(s, private=True)
13
14 sessionCache = SessionCache()
15
16 class MyHTTPServer(ThreadingMixIn, TLSSocketServerMixIn, HTTPServer):
17 def handshake(self, tlsConnection):
18 try:
19 tlsConnection.handshakeServer(certChain=certChain,
20 privateKey=privateKey,
21 sessionCache=sessionCache)
22 tlsConnection.ignoreAbruptClose = True
23 return True
24 except TLSError, error:
25 print "Handshake failure:", str(error)
26 return False
27
28 httpd = MyHTTPServer(('localhost', 443), SimpleHTTPRequestHandler)
29 httpd.serve_forever()

Lo mejor de todo, es que la implementación está en python puro, así que todo funciona sin necesidad de compilaciones poco amigables.

Para probarlo simplemente:
jaa@dino-thunder:~/taller/tlslite-0.3.8$ cp test/httpsserver.py .
jaa@dino-thunder:~/taller/tlslite-0.3.8$ cp test/serverX509Cert.pem .
jaa@dino-thunder:~/taller/tlslite-0.3.8$ cp test/serverX509Key.pem .
jaa@dino-thunder:~/taller/tlslite-0.3.8$ ls -l
total 54
drwx------ 4 jaa jaa 160 2005-02-21 23:44 docs
-rwx------ 1 jaa jaa 950 2008-08-18 19:46 httpsserver.py
drwx------ 2 jaa jaa 144 2005-02-21 23:44 installers
-rwx------ 1 jaa jaa 1934 2005-02-21 22:53 make_release.py
-rwx------ 1 jaa jaa 30268 2005-02-21 23:13 readme.txt
drwx------ 2 jaa jaa 96 2005-02-21 23:44 scripts
-rwx------ 1 jaa jaa 973 2008-08-18 19:46 serverX509Cert.pem
-rwx------ 1 jaa jaa 887 2008-08-18 19:46 serverX509Key.pem
-rwx------ 1 jaa jaa 824 2005-02-21 22:57 setup.py
drwx------ 3 jaa jaa 656 2008-08-18 19:44 test
drwx------ 4 jaa jaa 1272 2008-08-06 17:54 tlslite
jaa@dino-thunder:~/taller/tlslite-0.3.8$ sudo python ./httpsserver.py

obviamente, hay que ejecutar como root, ya que para levantar un servidor https (port 443) necesitamos ser root.

Si vamos a nuestro browser, y hacemos https://localhost, entonces vamos a ver el listado del directorio donde ejecutamos httpsserver.py, y para empezar a jugar, podemos poner ahí un html e intentar verlo desde el browser.

Despues agrego los comandos para generar nuestros propios certificados.

Etiquetas: , , , ,

0 comentarios:

Publicar un comentario en la entrada

Suscribirse a Enviar comentarios [Atom]

<< Página principal