[Buildbot-devel] slave connection over ssl possible?
Andy Howell
AndyHowell at austin.rr.com
Tue Oct 13 06:14:09 UTC 2009
>
> I've had a couple of more security-minded folks complain about the
> unencrypted slave connection, particularly because there's a password
> involved. (telling them that the buildslave password is really there
> just to discourage block-the-real-slave nuisances doesn't seem to
> mollify them). I know people who've wanted to use the buildbot on
> closed-source projects and send e.g. SVN username/password to the
> buildslaves, but were worried about who might be able to see them. And I
> can imagine closed-but-distributed projects that want to run buildslaves
> outside of their secure LAN and not expose their code to anyone else,
> who would be worried both about traffic on the wire and false slaves
> pretending to be real ones to get access to repository information
> and/or credentials.
Brian & Jean-Paul,
I'm one of those people :) That's what got me started on this topic. I've got a couple
build machines at a remote site.
I've hacked it to make it work over SSL, but a proper fix requires more thought.
The master side works fine by specifying the port in the format defined in
twisted.application.strports:
c['slavePortnum'] = "ssl:9989:privateKey=mykey.pem:certKey=mycert.pem"
To make the sendchange and the slaves work requires replacing the connectTCP and TCPClient
calls to their SSL counterparts. The downside of the hack is that the slave and sendchange
only work with SSL, and it wouldn't support certs on the slave side.
It looks to me like the strport methods only work on the server side. I would need to make
the equivalent mechanism for the client side.
Ideally the master could listen on a regular TCP connection and an SSL one. Only
connections over the internet would need SSL. The c['slavePortNum'] could be a list.
Does this seem like a reasonable set of changes to make?
Here are all the places that use connectTCP or TCPClient.
connectTCP:
clients.base.TextClient.startConnecting()
clients.debug.DebugWidget.do_connect()
clients.sendchange.Sender.send() ( changed )
scripts.tryclient.Try.deliverJob()
scripts.tryclient.Try.getStatus()
test.testweb.Logfile.test_logfile5()
test.testweb.Logfile.test_logfile6()
TCPClient:
changes.freshcvs.FrehsCVSSourcNewcred.__init__
changes.freshcvs.FrehsCVSSourcOldcred.__init__
slave.bot.BuildSlave.__init__ ( changed )
status.words.IRC.__init__ ??
test.test_config.ConfigTest.TCPlients - new test for SSL?
Terrible hack:
diff -u buildbot/clients/sendchange.py.org buildbot/clients/sendchange.py
--- buildbot/clients/sendchange.py.org 2009-10-12 23:56:13.000000000 -0500
+++ buildbot/clients/sendchange.py 2009-10-13 00:02:48.000000000 -0500
@@ -2,6 +2,7 @@
from twisted.spread import pb
from twisted.cred import credentials
from twisted.internet import reactor
+from twisted.internet.ssl import ClientContextFactory
class Sender:
def __init__(self, master, user=None):
@@ -20,7 +21,8 @@
f = pb.PBClientFactory()
d = f.login(credentials.UsernamePassword("change", "changepw"))
- reactor.connectTCP(self.host, self.port, f)
+ cf=ClientContextFactory()
+ reactor.connectSSL(self.host, self.port, f, cf)
d.addCallback(self.addChange, change)
return d
diff -u buildbot/slave/bot.py.org buildbot/slave/bot.py
--- buildbot/slave/bot.py.org 2009-10-12 23:20:28.000000000 -0500
+++ buildbot/slave/bot.py 2009-10-13 00:16:52.000000000 -0500
@@ -8,6 +8,7 @@
from twisted.internet import reactor, defer
from twisted.application import service, internet
from twisted.cred import credentials
+from twisted.internet.ssl import ClientContextFactory
from buildbot.util import now
from buildbot.pbutil import ReconnectingPBClientFactory
@@ -483,7 +484,8 @@
self.umask = umask
bf = self.bf = BotFactory(keepalive, keepaliveTimeout, maxdelay)
bf.startLogin(credentials.UsernamePassword(name, passwd), client=bot)
- self.connection = c = internet.TCPClient(buildmaster_host, port, bf)
+ cf=ClientContextFactory()
+ self.connection = c = internet.SSLClient(buildmaster_host, port, bf, cf)
c.setServiceParent(self)
def waitUntilDisconnected(self):
Thanks,
Andy
More information about the devel
mailing list