Re: [openstack-dev] [FUEL] Re: SSL in Fuel.

2014-09-11 Thread Simon Pasquier
Hi,

On Thu, Sep 11, 2014 at 1:03 PM, Sebastian Kalinowski <
skalinow...@mirantis.com> wrote:

> I have some topics for [1] that I want to discuss:
>
> 1) Should we allow users to turn SSL on/off for Fuel master?
> I think we should since some users may don't care about SSL and
> enabling it will just make them unhappy (like warnings in browsers,
> expiring certs).
>
>
Definitely +1. I think that Tomasz mentioned somewhere that HTTP should be
kept as the default.


> 2) Will we allow users (in first iteration) to use their own certs?
> If we will (which I think we should and other people aslo seems to
> share this point of view), we have some options for that:
>  A) Add informations to docs where to upload your own certificate on
> master node (no UI) - less work, but requires a little more action from
> users
>  B) Simple form in UI where user will be able to paste his certs -
> little bit more work, user friendly
> Are there any reasons we shouldn't do that?
>
>
Option A is enough. If there is enough time to implement option B, that's
cool but this should not be a blocker.


> 3) How we will manage cert expiration?
> Stanislaw proposed that we should show user a notification that will
> tell user about cert expiration. We could check that in cron job.
> I think that we should also allow user to generate a new cert in Fuel
> if the old one will expire.
>

As long as the user cannot upload a certificate, we don't need to care
about this point but it should be mentioned in the doc.
And to avoid this problem, Fuel should generate certificates that expire in
many years (eg >= 10).

BR

Simon

>
> I'll also remove part about adding cert validation in fuel agent since it
> would require a significant amount of work and it's not essential for first
> iteration.
>
> Best,
> Sebastian
>
>
> [1] https://blueprints.launchpad.net/fuel/+spec/fuel-ssl-endpoints
>
>
> ___
> OpenStack-dev mailing list
> OpenStack-dev@lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
>
___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


Re: [openstack-dev] [FUEL] Re: SSL in Fuel.

2014-09-11 Thread Sebastian Kalinowski
I have some topics for [1] that I want to discuss:

1) Should we allow users to turn SSL on/off for Fuel master?
I think we should since some users may don't care about SSL and
enabling it will just make them unhappy (like warnings in browsers,
expiring certs).

2) Will we allow users (in first iteration) to use their own certs?
If we will (which I think we should and other people aslo seems to
share this point of view), we have some options for that:
 A) Add informations to docs where to upload your own certificate on
master node (no UI) - less work, but requires a little more action from
users
 B) Simple form in UI where user will be able to paste his certs -
little bit more work, user friendly
Are there any reasons we shouldn't do that?

3) How we will manage cert expiration?
Stanislaw proposed that we should show user a notification that will
tell user about cert expiration. We could check that in cron job.
I think that we should also allow user to generate a new cert in Fuel
if the old one will expire.

I'll also remove part about adding cert validation in fuel agent since it
would require a significant amount of work and it's not essential for first
iteration.

Best,
Sebastian


[1] https://blueprints.launchpad.net/fuel/+spec/fuel-ssl-endpoints
___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


Re: [openstack-dev] [FUEL] Re: SSL in Fuel.

2014-09-10 Thread Guillaume Thouvenin
On Wed, Sep 10, 2014 at 2:40 PM, Tomasz Napierala 
wrote:

>
> Regarding
> After careful consideration, I think that for 6.0 we will only be able to
> implement [2] with limited functionality. In terms of certificate
> management, we could offer uploading customer generated cert (and maybe
> provide shot doc on how to spawn CA + sign certs)
> After 6.0 we can concentrate on proper implementation of CA management,
> and then allow Fuel master node part to use it.
>
> [1] https://blueprints.launchpad.net/fuel/+spec/ca-deployment
> [2] https://blueprints.launchpad.net/fuel/+spec/fuel-ssl-endpoints
> [3] https://blueprints.launchpad.net/fuel/+spec/ssl-endpoints



So if I understand correctly the idea is that we implement basic
functionality for [2] and [3] especially for the management of the
certificate. I guess that even if [2] and [3] are managing a self-signed
certificate by their own the code that does this could be share. And then
concentrate on the CA management. Thus I removed the dependency to [1] and
I consider that in [3] we should implement a limited functionality as
described above for [2].
___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


Re: [openstack-dev] [FUEL] Re: SSL in Fuel.

2014-09-10 Thread Sergii Golovatiuk
Hi,

Tomasz is right. Let's try not to complicate the things. For 6.0 we'll
allow just upload key, csr, certificate (like 3 edit boxes), or these edit
boxes will be greyed if customer allows to generate self-signed
certificates.



--
Best regards,
Sergii Golovatiuk,
Skype #golserge
IRC #holser

On Wed, Sep 10, 2014 at 1:40 PM, Tomasz Napierala 
wrote:

>
> On 10 Sep 2014, at 12:54, Simon Pasquier  wrote:
>
> > Hello,
> >
> > Lets back up a bit and list the different options for Fuel users:
> > 0/ The user is happy with plain HTTP.
> > => Already supported :)
> > 1/ The user wants HTTPS but doesn't want the burden associated with
> certificate management.
> > => Fuel creates and manages the SSL certificates, be them self-signed or
> signed by some internal CA.
> > => Using an internal CA instead of multiple self-signed certificates is
> cleaner as you explained.
> > 2/ The user wants HTTPS and wants to use certificates which are
> generated by an external source (either some internal corporate PKI or some
> public certificate authority)
> > => Fuel supports certificate + key uploads
> > => It should be possible to tell Fuel which entity (Fuel, OSt
> environment) uses which certificate
> > 3/ The user wants HTTPS and agrees to let Fuel generating certificates
> on behalf of some corporate PKI.
> > => Fuel supports CA + key uploads
> >
> > I think that option 1 is the way to go for a first approach. Option 2 is
> definitely something that end-users would need at some point. I'm less
> convinced by option 3: if I were a PKI admin, I'll be reluctant to let Fuel
> generate certificates on its own. Also my gut feeling tells me that
> implementing 1 & 2 is already quite a lot of work.
> >
> > I've also added some questions/comments inline.
>
> Regarding
> After careful consideration, I think that for 6.0 we will only be able to
> implement [2] with limited functionality. In terms of certificate
> management, we could offer uploading customer generated cert (and maybe
> provide shot doc on how to spawn CA + sign certs) or if user does not want
> to do it, generate simple self signed cert and install it on Fuel http
> server and let user download it.
>
> After 6.0 we can concentrate on proper implementation of CA management,
> and then allow Fuel master node part to use it.
>
> [1] https://blueprints.launchpad.net/fuel/+spec/ca-deployment
> [2] https://blueprints.launchpad.net/fuel/+spec/fuel-ssl-endpoints
> [3] https://blueprints.launchpad.net/fuel/+spec/ssl-endpoints
> --
> Tomasz 'Zen' Napierala
> Sr. OpenStack Engineer
> tnapier...@mirantis.com
>
>
>
>
>
>
>
> ___
> OpenStack-dev mailing list
> OpenStack-dev@lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


Re: [openstack-dev] [FUEL] Re: SSL in Fuel.

2014-09-10 Thread Tomasz Napierala

On 10 Sep 2014, at 12:54, Simon Pasquier  wrote:

> Hello,
> 
> Lets back up a bit and list the different options for Fuel users:
> 0/ The user is happy with plain HTTP.
> => Already supported :)
> 1/ The user wants HTTPS but doesn't want the burden associated with 
> certificate management.
> => Fuel creates and manages the SSL certificates, be them self-signed or 
> signed by some internal CA.
> => Using an internal CA instead of multiple self-signed certificates is 
> cleaner as you explained.
> 2/ The user wants HTTPS and wants to use certificates which are generated by 
> an external source (either some internal corporate PKI or some public 
> certificate authority)
> => Fuel supports certificate + key uploads
> => It should be possible to tell Fuel which entity (Fuel, OSt environment) 
> uses which certificate
> 3/ The user wants HTTPS and agrees to let Fuel generating certificates on 
> behalf of some corporate PKI.
> => Fuel supports CA + key uploads
> 
> I think that option 1 is the way to go for a first approach. Option 2 is 
> definitely something that end-users would need at some point. I'm less 
> convinced by option 3: if I were a PKI admin, I'll be reluctant to let Fuel 
> generate certificates on its own. Also my gut feeling tells me that 
> implementing 1 & 2 is already quite a lot of work.
> 
> I've also added some questions/comments inline.

Regarding 
After careful consideration, I think that for 6.0 we will only be able to 
implement [2] with limited functionality. In terms of certificate management, 
we could offer uploading customer generated cert (and maybe provide shot doc on 
how to spawn CA + sign certs) or if user does not want to do it, generate 
simple self signed cert and install it on Fuel http server and let user 
download it. 

After 6.0 we can concentrate on proper implementation of CA management, and 
then allow Fuel master node part to use it.

[1] https://blueprints.launchpad.net/fuel/+spec/ca-deployment
[2] https://blueprints.launchpad.net/fuel/+spec/fuel-ssl-endpoints
[3] https://blueprints.launchpad.net/fuel/+spec/ssl-endpoints
-- 
Tomasz 'Zen' Napierala
Sr. OpenStack Engineer
tnapier...@mirantis.com







___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


Re: [openstack-dev] [FUEL] Re: SSL in Fuel.

2014-09-10 Thread Simon Pasquier
Hello,

Thanks for the detailed email, Stanislaw. Your suggestion of deploying a CA
container is really interesting. Especially for OSTF and other testing
since the tools only need to know about the "root" CA.

Lets back up a bit and list the different options for Fuel users:
0/ The user is happy with plain HTTP.
=> Already supported :)
1/ The user wants HTTPS but doesn't want the burden associated with
certificate management.
=> Fuel creates and manages the SSL certificates, be them self-signed or
signed by some internal CA.
=> Using an internal CA instead of multiple self-signed certificates is
cleaner as you explained.
2/ The user wants HTTPS and wants to use certificates which are generated
by an external source (either some internal corporate PKI or some public
certificate authority)
=> Fuel supports certificate + key uploads
=> It should be possible to tell Fuel which entity (Fuel, OSt environment)
uses which certificate
3/ The user wants HTTPS and agrees to let Fuel generating certificates on
behalf of some corporate PKI.
=> Fuel supports CA + key uploads

I think that option 1 is the way to go for a first approach. Option 2 is
definitely something that end-users would need at some point. I'm less
convinced by option 3: if I were a PKI admin, I'll be reluctant to let Fuel
generate certificates on its own. Also my gut feeling tells me that
implementing 1 & 2 is already quite a lot of work.

I've also added some questions/comments inline.

BR,

Simon

On Tue, Sep 9, 2014 at 5:53 PM, Stanislaw Bogatkin 
wrote:

> I think that if we have 3 blueprints that realises some SSL stuff around
> themselves then we can discuss it here.
> My vision about SSL in Fuel split into 3 parts:
>
> A) We need to implement [1] blueprint, cause it is only one way to
> generate certificates.
> How i see that:
> 1.0 We sync puppet-openssl from upstream, adapt it for Fuel tasks.
> 1.1 We create docker container (we already have many, so containerized
> CA should work well) with OpenSSL and puppet manifests in it.
> 1.2 When container will start first time, it will create CA that will
> store on master node.
>
> Our workitems here is:
> - Create docker container
> - Sync upstream puppet-openssl and adapt it for Fuel
> - Write code to create CA
>

First of all I think this blueprint should be submitted to fuel-specs ;)
How do you see the exchanges between the CA container and the various
services? For instance, how would nailgun asks for a signed certificate and
get back the result?


>
> B) We need to implement [2] blueprint. How I see that:
> 1.3 When CA container start first time and creates CA, then it will
> check for keypair for master node (Fuel UI). If that keypair will not
> found, then CA create it, change nginx conffile properly and restart nginx
> on master node.
>
>
I find awkward to have the CA container restarting nginx...


> Our workitems here is:
> - Write code to check if we already have generated certificate and
> generate new if we have not.
>
> C) Then we need to implement [3] blueprint
> For next step we have 2 options:
>   First:
> 1.3 When we create new cluster then we know all information to create
> new keypair(s). When user press "Deploy changes" button, then we will
> create new keypair(s).
> Q: Main question here is - how many keypairs we will create? One for every
> service or one for all?
>

As a first implementation, I assume that one certificate for all OSt
services is good enough.


> 1.4 We will distribute key(s) with mcollective agent (similar to how
> we sync puppet manifests from master node to other nodes). After that
> private key(s) will deleted from master node.
>

How will it work if the user modifies the configuration of the environment
afterwards? Say he/she adds one controller node, how will it be able to
copy the private key to the new node?


> 1.5 On nodes puppet will do all work. We need to write some code for
> that
> Pros of that method:
> + It's relative simple, we can create clean and lucid code that
> will be easy for support
> Cons of that method:
> - We need to send every private key over network. We can reduce
> this danger cause we will already have passwordless sync over network
> between master node and other nodes, cause we will generate ssh keys for
> nodes before we will distribute any data at deployment stage.
>
>   Second:
> 1.3 When we create new cluster, we do all work same way as we do it
> now, but after provisioning we will create keypair on first node, make csr
> for every service (or for one, if we will create one certificate for all
> services) and send that csr to master node, where it will signed and
> certificate will send back.
> 1.4 Puppet will do all work on nodes. We, obviously, need to write
> some code for it. But we need to sync our keys over controllers all the
> same (and now we don't have reliable mechanism to do this)
> Pros of that method:
> + I don't see any
> Cons of that method:

Re: [openstack-dev] [FUEL] Re: SSL in Fuel.

2014-09-10 Thread Sebastian Kalinowski
On Tue, Sep 9, 2014 at 5:53 PM, Stanislaw Bogatkin 
wrote:

> >So I think that we need to start on [3]. As this is required for OSt
> public
> >endpoint SSL and also for Fuel SSL it can be quicker to make a first stage
> >where a self-signed certificate is managed from nailgun and a second stage
> >with the docker CA...
> So, yes, I think that it is good idea, cause it will be good base for [2]
> and [3]
>
> [1] https://blueprints.launchpad.net/fuel/+spec/ca-deployment
> [2] https://blueprints.launchpad.net/fuel/+spec/fuel-ssl-endpoints
> [3] https://blueprints.launchpad.net/fuel/+spec/ssl-endpoints
>

+1

I totally agree that we should start with [1] first and later focus on [2]
and [3].

I'll also update [2] to adjust it to the plan you proposed.


Best,
Sebastian
___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


[openstack-dev] [FUEL] Re: SSL in Fuel.

2014-09-09 Thread Stanislaw Bogatkin
I think that if we have 3 blueprints that realises some SSL stuff around
themselves then we can discuss it here.
My vision about SSL in Fuel split into 3 parts:

A) We need to implement [1] blueprint, cause it is only one way to generate
certificates.
How i see that:
1.0 We sync puppet-openssl from upstream, adapt it for Fuel tasks.
1.1 We create docker container (we already have many, so containerized
CA should work well) with OpenSSL and puppet manifests in it.
1.2 When container will start first time, it will create CA that will
store on master node.

Our workitems here is:
- Create docker container
- Sync upstream puppet-openssl and adapt it for Fuel
- Write code to create CA

B) We need to implement [2] blueprint. How I see that:
1.3 When CA container start first time and creates CA, then it will
check for keypair for master node (Fuel UI). If that keypair will not
found, then CA create it, change nginx conffile properly and restart nginx
on master node.

Our workitems here is:
- Write code to check if we already have generated certificate and generate
new if we have not.

C) Then we need to implement [3] blueprint
For next step we have 2 options:
  First:
1.3 When we create new cluster then we know all information to create
new keypair(s). When user press "Deploy changes" button, then we will
create new keypair(s).
Q: Main question here is - how many keypairs we will create? One for every
service or one for all?
1.4 We will distribute key(s) with mcollective agent (similar to how we
sync puppet manifests from master node to other nodes). After that private
key(s) will deleted from master node.
1.5 On nodes puppet will do all work. We need to write some code for
that
Pros of that method:
+ It's relative simple, we can create clean and lucid code that
will be easy for support
Cons of that method:
- We need to send every private key over network. We can reduce
this danger cause we will already have passwordless sync over network
between master node and other nodes, cause we will generate ssh keys for
nodes before we will distribute any data at deployment stage.

  Second:
1.3 When we create new cluster, we do all work same way as we do it
now, but after provisioning we will create keypair on first node, make csr
for every service (or for one, if we will create one certificate for all
services) and send that csr to master node, where it will signed and
certificate will send back.
1.4 Puppet will do all work on nodes. We, obviously, need to write some
code for it. But we need to sync our keys over controllers all the same
(and now we don't have reliable mechanism to do this)
Pros of that method:
+ I don't see any
Cons of that method:
- Code will be not so obvious
- To generate cert we need to rely to other service (network) and
if network will unreachable then csr signing will fail and all following
deployment will fail because we will not have valid certificate

Independing of choice (first or second), our workitems here is:
- Write code to provide functions about generating keypairs, csr's and
signing them.

1.5. When we have created CA and certs for services, we can do usual
puppet apply to deploy changes.

Workitems on that stage:
- Sync upstream modules that already have big changes to SSL support (e.g.
HAProxy) and adapt that modules to Fuel usage
- Rewrite some of manifests to support https support

As I see, at that phase we can say that Stage I for blueprint [3] is ready.
What we can do next? My thoughts is that:

2. We need to think about use case when user want to import his own
certificate to Fuel or Openstack services endpoints (cause in that case
users will not see warning popup in browser about not trusted certificate
or cause corporate policy say to do that). I see that way:

2.1 We can provide ability to change some keypairs (e.g. for Fuel UI
and Horizon)
Q: How many keys user can change? We can provide ability to change all keys
(but why we need to do that?)
Q: If user will replace some of keys with his own key - how we will check
that it is not some malicious but valid user key? Or we will trust all keys
by default?
To do that we will need to change:
- Some UI changes to provide ability to upload user keys
- Some Nailgun and Astute changes to operate with new keys
- Some puppet manifest changes to apply new keys and restart services
- Some changes to check basic validity of uploaded keys (expiry date, key
length, key type)

3. We can give user ability to change CA keypair (if user trust certificate
from that keypair then he automatically will trust all certificates that
will signed with that CA, so if user company trusted CA issue
cross-sertificate for Fuel then user automatically will agree that all
certificates in deployed by Fuel services is trusted). For do that we need:
- Some UI changes to provide ability to upload user CA key
- Some Nailgun and Astute changes to operate with new CA keys
- Write so