[ 
https://issues.apache.org/jira/browse/ACCUMULO-1749?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Josh Elser updated ACCUMULO-1749:
---------------------------------
    Fix Version/s:     (was: 1.7.0)
                   1.8.0

> Provide tool for assisting cert provisioning across tserver cluster
> -------------------------------------------------------------------
>
>                 Key: ACCUMULO-1749
>                 URL: https://issues.apache.org/jira/browse/ACCUMULO-1749
>             Project: Accumulo
>          Issue Type: Sub-task
>          Components: client, master, tserver
>            Reporter: Michael Berman
>            Priority: Minor
>             Fix For: 1.8.0
>
>
> Provisioning certs off a private root for each tserver is an annoying and 
> repetitive task.  It would be nice for some of it to be done in an automated 
> way.  Whether or not this should actually be accumulo's responsibility was a 
> contentious issue in ACCUMULO-1009.  Here are some arguments for and against 
> the feature; see the thread on the original issue for more context.
> [~ctubbsii]:
> {quote}
> Automatic cert provisioning within Accumulo itself seems out of scope to me 
> (if it were me, I'd rather use the system's certs in /etc/pki/tls/certs/, 
> which is the default location for the Apache web server and a bunch of other 
> apps, and uniquely identify the server cryptographically).
> As long as we make sure Accumulo can be configured easily, we'll set the 
> groundwork for any provisioning utility or practice that users are already 
> familiar with for their other secure applications, according to their 
> environment's policies and practices. I'd prefer not trying to provide 
> everything when those functions already exist in Linux environments in 
> standard ways. Instead, we should leverage those standard practices, and 
> document how to interact with them. This significantly reduces the learning 
> curve for system administrators, I think.
> {quote}
> [~mberman]
> {quote}
> Regarding provisioning scenarios, I think some people will want to use certs 
> signed by public CAs the same way they would want to for a webserver, but I 
> still believe this will be unwieldy for tservers. I think the much more 
> common scenario would be for someone to generate a self-signed root on one 
> box, and then want to just cut however many more local certs on each of the 
> nodes in the cluster. As far as reducing the learning curve for system 
> administrators, I think running bin/accumulo init-ssl on each machine, and 
> having that generate certs in default locations and not require any 
> additional config would actually be less work than making them configure a 
> bunch of properties and figure out what relationships they want among all 
> their certs, even if the properties point to standardish locations. Having a 
> separate root and trust tree for accumulo also provides some additional 
> protection. I may not want to trust any accumulo that has a cert signed by a 
> public CA, since anyone could have a cert signed by a public CA. If my 
> cluster has its own root, I can be confident that any cert signed by that 
> root is part of my cluster.
> {quote}
> [~mallen]:
> {quote}
> Getting "real" certificates is a pain in the <insert your favorite body part 
> here>, especially when you start talking about trying to set up your own 
> sub-root from which you can cut certificates. Requiring someone to understand 
> how to do all that and then set up a bunch of configuration properties on top 
> of it puts up a big barrier to entry.
> Having something like Michael's suggested bin/accumulo init-ssl call do the 
> certificate generation and configuration for you would be my strongly 
> preferred choice, and would make setting up secure clusters much much easier. 
> The work to set up a reasonably secure SSL deployment is boilerplate, albeit 
> complex boilerplate. Unless you are extremely keen on handling this setup 
> yourself, or your company has stringent requirements in this area, having a 
> very easy to set up SSL configuration is a big boon.
> I also agree that being able to quickly test an SSL-enabled mini-cluster is 
> another huge win for making this code easily testable and maintainable.
> {quote}
> [~ctubbsii]:
> {quote}
> It's not always about reducing the work... sometimes, it's about doing stuff 
> in the way they already know how to do (or have already done). I'd much 
> rather not re-invent the wheel for provisioning certs. If we just make it 
> simple to configure certs, system administrators can just provision using 
> whatever process they currently know or use. No re-inventing the wheel at all.
> As for "real CA" signing... I expect a common use case would be to use an 
> intermediate CA that is signed by a "real CA". I'm not suggesting that 
> anybody go through the headache of getting every tserver cert signed by a 
> common public root. But... it doesn't really matter whether the "real CA" is 
> one that is pre-configured in a browser (something like VeriSign's root)... 
> so long as it's easy to configure. The point is to make it easy to control 
> which one they'll trust... which may be generated from their root, or an 
> intermediate root, or a trustStore that holds all the individual tserver 
> public certs. The point is to not make decisions for users regarding 
> certificate provisioning, and to just make it easy for them to use what they 
> want.
> {quote}
> [~mberman]:
> {quote}
> There's absolutely nothing preventing you from provisioning certs the way you 
> know how, assuming you already know how and you happen to have an 
> intermediate cert handy. I think it would be nice for people to have an easy 
> option as well if they're not already so equipped. And as Michael Allen says 
> above, there are definitely security and operational reasons for wanting a 
> separate trust tree for your accumulo deployment.
> {quote}
> [~ctubbsii]:
> {quote}
> By providing a "security on" button, you're encouraging users to not even 
> think about security by creating an easy button (like your proposed 
> "bin/accumulo init-ssl") that presumably implements some sort of security 
> without thinking about what kind of security, what protections it offers, and 
> what risks it mitigates. This is a bad precedent, and it feels like your 
> coding to developers (like us, for ease in testing) rather than users... 
> either that, or users who want security but really don't know what they're 
> doing and who just want the comfort of "security" (not a good target audience 
> to cater to, as a rule).
> The best thing for provisioning is to simply document how one might provision 
> certificates... perhaps as a sequence of keytool or openssl commands. That 
> way, it's clear to users that Accumulo's security isn't anything special or 
> custom or novel. It's simply leveraging the same kinds of security that is 
> available to them in other applications... the same that they may already 
> understand, or that is well documented, or that they can get help with on 
> StackOverflow or the countless message boards.
> {quote}
> [~_alexm]:
> {quote}
> I'll throw in my $0.02; in short, resist the temptation to handle certificate 
> provisioning.
> If provisioning is included, it becomes a type of one-off product that:
> - does its own thing
> - has to be maintained
> - security/admin folks have to address separately as a one-off
> When key/truststores can be reused between services, it makes life of the 
> admin a lot easier. For users that require encryption in transit, 
> certificates are typically well understood and tooling exists to generate and 
> provision. That being said, trying to shoehorn those certs into an 
> internally-provisioned piece is usually kludgy at best.
> I see "accumulo init" as a case where steps – though complicated – are going 
> to be identical across users and are required to get the thing up and 
> running, whereas the generation of certificates is going to vary a bit and is 
> still optional.
> {quote}
> [~mallen]:
> {quote}
> I disagree that providing an easy and automated way to set up SSL provides no 
> more security and only adds complexity. Nor will I argue that it provides 
> iron-clad security. It is a step along the path towards good security.
> It seems like from your previous comments, you think an administrator must 
> make the leap from no security to all security in one bound. I think this is 
> a mistake. Database administrators are not all familiar with SSL, and how to 
> correctly deploy it. Deploying it properly is a mechanical issue, one that 
> can be easily automated. (By properly I am merely referring to getting actual 
> SSL connections working, not yet to how the certificate material is secured.) 
> Once deployed, network sniffing attacks and man-in-the-middle attacks are 
> thwarted, even if all Accumulo tserver nodes in the system have access to the 
> issuing CA.
> Securing the issuing CA can just be a matter of having the administrator use 
> a password for the root certificate's private key that is different than the 
> instance secret. Every new node will require that that password be provided, 
> thwarting the ability to have that node deployed unattended, but ratcheting 
> up the security. One could also devise a scheme where the root certificate 
> itself is kept offline until needed, further increasing one's ability to 
> control access to it.
> {quote}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to