SSL support on the proxy
authorDarren <darren@darrenwhitlen.com>
Thu, 23 Jan 2014 20:32:25 +0000 (20:32 +0000)
committerDarren <darren@darrenwhitlen.com>
Thu, 23 Jan 2014 20:32:25 +0000 (20:32 +0000)
server/kiwi.js
server/proxy.js

index 0a54e5d41df0e2528cd8624db53ca72305e9f4c7..2323a5f2a272feecb3b40205391edcd5926810d6 100755 (executable)
@@ -233,7 +233,7 @@ _.each(global.config.servers, function (server) {
     if (server.type == 'proxy') {
         // Start up a kiwi proxy server
         var serv = new Proxy.ProxyServer();
-        serv.listen(server.port, server.address);
+        serv.listen(server.port, server.address, server);
 
         serv.on('listening', function() {
             console.log('Kiwi proxy listening on %s:%s %s SSL', server.address, server.port, (server.ssl ? 'with' : 'without'));
index 9ff2ff87baa88c29c2022231ace5898905e133c8..91dbbf18a1e4ec4300f08480640935406402f058 100644 (file)
@@ -1,8 +1,9 @@
 var stream = require('stream'),
     util   = require('util'),
     events = require('events'),
-    net    = require("net"),
-    tls    = require("tls");
+    net    = require('net'),
+    tls    = require('tls'),
+    fs     = require('fs');
 
 
 module.exports = {
@@ -35,11 +36,39 @@ function ProxyServer() {
 util.inherits(ProxyServer, events.EventEmitter);
 
 
-ProxyServer.prototype.listen = function(listen_port, listen_addr) {
-    var that = this;
+ProxyServer.prototype.listen = function(listen_port, listen_addr, opts) {
+    var that = this,
+        serv_opts = {};
+
+    opts = opts || {};
+
+    // Listen using SSL?
+    if (opts.ssl) {
+        serv_opts = {
+            key: fs.readFileSync(opts.ssl_key),
+            cert: fs.readFileSync(opts.ssl_cert)
+        };
+
+        // Do we have an intermediate certificate?
+        if (typeof opts.ssl_ca !== 'undefined') {
+            // An array of them?
+            if (typeof opts.ssl_ca.map !== 'undefined') {
+                serv_opts.ca = opts.ssl_ca.map(function (f) { return fs.readFileSync(f); });
+
+            } else {
+                serv_opts.ca = fs.readFileSync(opts.ssl_ca);
+            }
+        }
+
+        this.server = tls.createServer(serv_opts);
+
+    }
+
+    // No SSL, start a simple clear text server
+    else {
+        this.server = new net.Server();
+    }
 
-    // Start listening for proxy connections connections
-    this.server = new net.Server();
     this.server.listen(listen_port, listen_addr, function() {
         that.emit('listening');
     });