Skip to content

Commit 43f03ff

Browse files
committed
Added SSL support
1 parent 9933136 commit 43f03ff

File tree

4 files changed

+70
-7
lines changed

4 files changed

+70
-7
lines changed

ajenti/config.py

100644100755
+3-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44

55
default_values = {
66
'bind_host': '',
7-
'bind_port': '8000'
7+
'bind_port': '8000',
8+
'ssl' : '1',
9+
'cert_file': 'server.pem'
810
}
911

1012
default_values['platform'] = detect_platform()

ajenti/standalone.py

100644100755
+34-4
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,36 @@
33

44
import sys
55
import logging
6-
from wsgiref.simple_server import make_server
6+
from wsgiref.simple_server import make_server, WSGIRequestHandler, WSGIServer
7+
from OpenSSL import SSL
8+
import socket
79

810
from ajenti.config import Config
911
from ajenti.app import AppDispatcher
1012

11-
def simple_server():
13+
14+
class SecureRequestHandler(WSGIRequestHandler):
15+
def setup(self):
16+
self.connection = self.request
17+
self.rfile = socket._fileobject(self.request, "rb", self.rbufsize)
18+
self.wfile = socket._fileobject(self.request, "wb", self.wbufsize)
19+
20+
21+
class SecureServer(WSGIServer):
22+
cert_file = ''
23+
24+
def __init__(self, server_address, HandlerClass):
25+
WSGIServer.__init__(self, server_address, HandlerClass)
26+
ctx = SSL.Context(SSL.SSLv23_METHOD)
27+
ctx.use_privatekey_file(SecureServer.cert_file)
28+
ctx.use_certificate_file(SecureServer.cert_file)
29+
self.socket = SSL.Connection(ctx, socket.socket(self.address_family,
30+
self.socket_type))
31+
self.server_bind()
32+
self.server_activate()
33+
34+
35+
def server():
1236
# Initialize logging subsystem
1337
log = logging.getLogger('ajenti')
1438
stderr = logging.StreamHandler()
@@ -26,9 +50,15 @@ def simple_server():
2650
config.set('log_facility',log)
2751

2852
# Start server
29-
httpd = make_server(host, port, AppDispatcher(config).dispatcher)
53+
if config.getint('ajenti', 'ssl') == 1:
54+
SecureServer.cert_file = config.get('ajenti','cert_file')
55+
httpd = make_server(host, port, AppDispatcher(config).dispatcher, SecureServer, SecureRequestHandler)
56+
else:
57+
httpd = make_server(host, port, AppDispatcher(config).dispatcher)
58+
3059
try:
3160
httpd.serve_forever()
3261
except KeyboardInterrupt, e:
3362
log.warn('Stopping by <Control-C>')
34-
63+
64+

serve.py

100644100755
+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/usr/bin/env python
22

3-
from ajenti.standalone import simple_server
3+
from ajenti.standalone import server
44

55
if __name__ == '__main__':
6-
simple_server()
6+
server()
77

server.pem

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
-----BEGIN RSA PRIVATE KEY-----
2+
MIICXQIBAAKBgQC332g78wJol72MU60YDXnewvh8Zh6sTAsBVrn0fisMmrvvc2JK
3+
Kc2taoHn/nOTsnqoQ9n0jQrBWwu6F7YzqwqyrJW0U5z0ndAdSN2eTOe2mGH2jOuh
4+
sPtcrh9j47ryCUfSiwgEqRMmfB/X4Y++tZlG+kQGvEIYQ0jbKabkHNqecwIDAQAB
5+
AoGAJZNpSL8LofZIjTHYcM7oNebgQwPXhtxvb1Ga5OUXxRamC3QoBQHv/12BuLhe
6+
RDO4L0TWeMyOAx+pENmhqYNtxucdC2REUu4fMSLuUxniN7tyZDRbTKLaubFgVPOD
7+
OX4XRYNi5gCanD0nHM9+z1Fq2IU09LsTT5nQNt2JjNzMR2kCQQDeAEQs7RQsV+zn
8+
3oQqfoKHHGCZ94WJXLKloGvpy45h8sq4qZVGTni9Qe8L5CtNtU9I0iMQ3Y3ww6q3
9+
fIGVTyj/AkEA1AhJiLE650nobgEvWPUg69MAToV03K8mRnbvL8b2SzR3kkoSHeMc
10+
pveP03q0JQGAJnk/5WxnDcTigH5T9ST2jQJBAN06jLXsiAbslAQ45aJnMfIsoEOu
11+
u184hjqxU/jHRhtr1QMS09QdTQrlEq/Z8CFfRiQ+bH1ZHCLLCmwRYh0FpscCQHZL
12+
uVr+JnLsFTVqi9QBz0BDFKS6aJzHS398063AP6FtwFhp4vmxwEaXUDMY/nC3CZxt
13+
gWyqskRIWGaAFK9s0/ECQQCF5avvufBAN7xxKmZtgM8Y7u/iLwLe9KqSZqVfRvzZ
14+
PxlnmUcjZs0WFkGCu+W4p5I7o0WFZaZIzjO8mKZ2SCyr
15+
-----END RSA PRIVATE KEY-----
16+
-----BEGIN CERTIFICATE-----
17+
MIICjzCCAfigAwIBAgIJAI/GDuUaKh3GMA0GCSqGSIb3DQEBBQUAMDoxFjAUBgNV
18+
BAcTDVRoZSBzYXZhbm5haHMxDzANBgNVBAoTBkFqZW50aTEPMA0GA1UEAxMGYWpl
19+
bnRpMB4XDTEwMDMxODA4NTM1MVoXDTExMDMxODA4NTM1MVowOjEWMBQGA1UEBxMN
20+
VGhlIHNhdmFubmFoczEPMA0GA1UEChMGQWplbnRpMQ8wDQYDVQQDEwZhamVudGkw
21+
gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALffaDvzAmiXvYxTrRgNed7C+Hxm
22+
HqxMCwFWufR+Kwyau+9zYkopza1qgef+c5OyeqhD2fSNCsFbC7oXtjOrCrKslbRT
23+
nPSd0B1I3Z5M57aYYfaM66Gw+1yuH2PjuvIJR9KLCASpEyZ8H9fhj761mUb6RAa8
24+
QhhDSNsppuQc2p5zAgMBAAGjgZwwgZkwHQYDVR0OBBYEFL238UdDnNB+a5fU6f/b
25+
fI50YCkzMGoGA1UdIwRjMGGAFL238UdDnNB+a5fU6f/bfI50YCkzoT6kPDA6MRYw
26+
FAYDVQQHEw1UaGUgc2F2YW5uYWhzMQ8wDQYDVQQKEwZBamVudGkxDzANBgNVBAMT
27+
BmFqZW50aYIJAI/GDuUaKh3GMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
28+
gYEAnTANwawdhPJLL4N765/hyt4BFwWGpg5XbI2dhXoq7meF5uqafrdsZMIFY4re
29+
7xllZ8Lt3AjQ4TNhBDUhyH5HYXxHCOHsNh8MwX0dOnkn79CSpNap2NScM/kSbcl9
30+
jhyzICGEVb7r1TNiwAIIfFD4L/qMF2ABWP4SU3DfJIVnjv0=
31+
-----END CERTIFICATE-----

0 commit comments

Comments
 (0)