[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
Re: ldapi without TLS and ldap with TLS?
Hi Philip,
Thank you for your elaborate feedback. Comments inline.
On 02/19/2013 03:42 AM, Philip Guenther wrote:
[snip]
"We need to protect corporate data in LDAP from being modified or even
accessed by untrusted resources.
Yes.
[snip]
"Because some of the applications cannot be configured to bind
non-anonymously but they all (except for that one) _can_ be configured
to always use StartTLS and provide a client certificate, we want to
require that all ldap:// connections use the StartTLS operation with a
client cert before performing any LDAP operations that access or modify
data.
Yes. Client certificate authentication is used everywhere where possible
(for things like corporate web access, email, VPN).
(That's a complete guess and probably not your real reason. Client certs
are just another form of secret which are, IMO, a bigger pain to generate
and manage.)
Thankfully the security overlords who came up with this one are also the
ones who have to generate and manage the certs :-)
[snip]
Well, for starters, the peername.ip="127.0.0.1" clause does *NOT* match
ldapi:// connections. It matches ldap://127.0.0.1/ and ldaps://127.0.0.1/
connections.
I did not try to use ldapi with this setup. I used ldap on 127.0.0.1.
Sorry if that was not clear.
[snip]
In what way is an ldapi:// connection insecure? It's a UNIX domain socket
for which the data never goes over a physical net and that therefore
cannot be snooped. That's *MORE* secure than a TCP connection secured
with TLS! You can even authenticate it via the uid and gid of the process
that opened the connection!
Agreed. The authentication via uid/gid is a nice one I did not know was
possible. Will look into that.
Anyway, if you want to permit only
a) read-only ldapi:// connections and
b) ldap:// connections using TLS w/client certs
then *I think* you can do that with three options in the config:
# require clients that clients that do TLS provide a client cert
olcTLSVerifyClient: demand
# treat ldapi:// connections as at least as secure as a 256bit cipher
olcLocalSSF: 256
# require connections to be at least as secure as a 256bit cipher to do
# anything at all (the "ssf=256") clause, and specifically require that
# they be using TLS (and not just ldapi) with 256bit cipher to do updates
olcSecurity: ssf=256 update_tls=256
Your example had me stumped. Upon reading the olcLocalSSF section again
I realized I made a mistake. Although it says "Specifies the Security
Strength Factor (SSF) to be *given* local LDAP sessions" my mind munched
it into "Specifies the Security Strength Factor (SSF) to *require* for
local LDAP sessions". Obviously setting it to 0 did not help... Staring
at the screen too long I guess. So thanks for making me read the man
page again :-)
But I haven't tested it.
Works like a charm.
[snip]
Yes, an unconditional "require blah" should be taken to be unconditional.
Duly noted.
Thank you very much for all your help and enlightening comments. Much
appreciated.
Regards,
Patrick