On Wed, Feb 22, 2017 at 10:17:32AM +0100, Martin Kosek wrote:
> On 02/20/2017 06:03 AM, Fraser Tweedale wrote:
> > On Fri, Feb 10, 2017 at 11:48:39AM +0100, Martin Kosek wrote:
> >> On 02/10/2017 10:37 AM, Fraser Tweedale wrote:
> >>> On Fri, Feb 10, 2017 at 09:23:10AM +0100, Martin Kosek wrote:
> >>>> On 02/09/2017 10:44 PM, Fraser Tweedale wrote:
> >>>>> On Thu, Feb 09, 2017 at 08:37:23AM +0100, Martin Kosek wrote:
> >>>>>> On 02/09/2017 02:12 AM, Fraser Tweedale wrote:
> >>>>>>> On Wed, Feb 08, 2017 at 10:19:54AM +0200, Alexander Bokovoy wrote:
> >>>>>>>> On ke, 08 helmi 2017, Martin Kosek wrote:
> >>>>>>>>> Hi Fraser and the list,
> >>>>>>>>>
> >>>>>>>>> I recently was in a conversation about integrating OpenShift with 
> >>>>>>>>> FreeIPA. One
> >>>>>>>>> of the gaps was around generating a wildcard certificate by FreeIPA 
> >>>>>>>>> that will
> >>>>>>>>> be used in the default OpenShift router for applications that do 
> >>>>>>>>> not deploy own
> >>>>>>>>> certificates [1].
> >>>>>>>>>
> >>>>>>>>> Is there any way that FreeIPA can generate it? I was thinking that 
> >>>>>>>>> uploading
> >>>>>>>>> some custom certificate profile in FreeIPA may let us get such 
> >>>>>>>>> certificate...
> >>>>>>>>> Or is the the only way we can add it by adding a new RFE in 
> >>>>>>>>> FreeIPA, tracked in
> >>>>>>>>> [2]?
> >>>>>>>> Yes, we need a new RFE. There are checks in IPA that prevent wildcard
> >>>>>>>> certificates to be issued:
> >>>>>>>>
> >>>>>>>> - we ensure subject 'cn' of the certificate matches a Kerberos 
> >>>>>>>> principal
> >>>>>>>>   specified in the request
> >>>>>>>>
> >>>>>>>> - we validate that host object exists in IPA when the Kerberos
> >>>>>>>>   principal is host/...
> >>>>>>>>
> >>>>>>>> We could lift off these two limitations for 'cn=*,$suffix' but there 
> >>>>>>>> is
> >>>>>>>> still a need to apply proper ACLs when issuing the cert -- e.g. some
> >>>>>>>> object has to be used for performing access rights check. The 
> >>>>>>>> wildcard
> >>>>>>>> certificate does not need to be stored anywhere in the tree, but a
> >>>>>>>> check still needs to be done.
> >>>>>>>>
> >>>>>>>> For example, for Kerberos PKINIT certificate which is issued to KDC 
> >>>>>>>> we
> >>>>>>>> don't store public certificate in LDAP either but we do two checks:
> >>>>>>>> - a special KDC certificate profile is used to issue the cert
> >>>>>>>> - a special hostname check is done so that only IPA masters are able 
> >>>>>>>> to
> >>>>>>>>   request this certificate
> >>>>>>>>
> >>>>>>>> For the wildcard certificate I think we could have following:
> >>>>>>>> - use a separate profile for the wildcard, associated with a sub-CA
> >>>>>>>> - hardcode CN default in the profile to always be 'CN=*, 
> >>>>>>>> O=$SUB_CA_SUBJECT' so that
> >>>>>>>>   actual certificate ignores requested CN.
> >>>>>>>> - a special check to be done so that only wildcard-based subject
> >>>>>>>>   alternative names can be added to a wildcard certificate request
> >>>>>>>> - all Kerberos principal / hostname checks are skipped.
> >>>>>>>> - actual ACL check is done by CA ACL.
> >>>>>>>>
> >>>>>>> Issuing wildcard certs is a deprecated practice[1].  I am not
> >>>>>>> dismissing the needs of OpenShift (or PaaS/IaaS solutions in
> >>>>>>> general) but I'd like to have a discussion with them about how
> >>>>>>> they're currently dealing with certs and whether a different
> >>>>>>> direction other than wildcard certs is feasible.  Martin, who should
> >>>>>>> I reach out to?  Feel free to copy them into this discussion.
> >>>>>>
> >>>>>> Right now, I am talking to a Solution Architect, i.e. someone who is 
> >>>>>> building
> >>>>>> GAed solutions, not developers. This is not something we would change
> >>>>>> short-term anyway, this is how current OpenShift v2 or v3 behaves, 
> >>>>>> despite the RFC.
> >>>>>>
> >>>>>> While I understand why having certificate *.lab.example.com and using 
> >>>>>> it for my
> >>>>>> lab machines is a bad idea and increases the attack vector, I do not 
> >>>>>> see it
> >>>>>> that way for OpenShift. There, applications get URL like
> >>>>>> "<app-dom>.myopenshift.test" and all is routed by one entity, the 
> >>>>>> OpenShift
> >>>>>> broker. So the key.cert is on one location, just serving different 
> >>>>>> names that
> >>>>>> are provisioned with OpenShift.
> >>>>>>
> >>>>>> I can understand that issuing a new certificate for every application
> >>>>>> provisioned by OpenShift and then renewing it complicates the design
> >>>>>> significantly. I am trying to be creative and see if current OpenShift 
> >>>>>> could
> >>>>>> leverage FreeIPA CA and issue the broker cert, with current profile
> >>>>>> capabilities or with small change.
> >>>>>>
> >>>>> I believe OpenShift supports per-application certificates (i.e. when
> >>>>> app developers/maintainers supply their own cert for a custom
> >>>>> domain).  So it might be possible in v2 or v3 to provision a cert
> >>>>> for every app.
> >>>>
> >>>> Right, it supports this. But then issuing the certificate and renewal is 
> >>>> a
> >>>> responsibility of app developer, AFAIK. I do not think if OpenShift has 
> >>>> all the
> >>>> needed hooks to do this automatically and call certmonger for example.
> >>>>
> >>>> TLDR; adding a support of certmonger and issuing a certificate for every 
> >>>> new
> >>>> application is a whole another degree of complexity than just issuing a
> >>>> Wildcard certificate for the router. I am not saying it should not be 
> >>>> done, I
> >>>> am just saying that being able to generate a wildcard certificate with 
> >>>> FreeIPA
> >>>> would let us integrate with OpenShift much better than now and with 
> >>>> (hopefully)
> >>>> low effort involved, i.e. faster.
> >>>>
> >>>>> An automated solution does not yet exist but that
> >>>>> doesn't mean it can't be built out of what's currently GA.
> >>>>>
> >>>>>>> [1] https://tools.ietf.org/html/rfc6125#section-7.2
> >>>>>>>
> >>>>>>> If we do go ahead with wildcard cert support in FreeIPA, some of my
> >>>>>>> initial questions are:
> >>>>>>>
> >>>>>>> - For the OpenShift use case, what is the "parent" domain name and
> >>>>>>>   is it the same as the IPA domain name?  Is it a subdomain of the
> >>>>>>>   IPA domain name?
> >>>>>>>
> >>>>>>> - Do we need to support issuing "*.${IPA_DOMAIN}"? i.e. wildcard
> >>>>>>>   cert under entire IPA domain name.
> >>>>>>>
> >>>>>>> - Do we need to support issuing "*.${IPA_HOSTNAME}"?  i.e. wildcard
> >>>>>>>   certs under names of IPA host principals.
> >>>>>>
> >>>>>> I do not know, but I can ask if it is important for you :-)
> >>>>>>
> >>>>> It's important to know what I actually need to do if we proceed with
> >>>>> implementing this :)
> >>>>
> >>>> We do not need to jump on implementing it right away, you already have a 
> >>>> lot on
> >>>> your plate. Right now, I must just want to know:
> >>>>
> >>>> - is there any way how I can generate wildcard cert with current 
> >>>> FreeIPA, using
> >>>> a custom certificate profile. I assume the answer is no.
> >>>>
> >>> I have an idea.
> >>>
> >>> - Assume there exists a FreeIPA host `foo.example.com', the "parent"
> >>>   domain name for the desired wildcard name `*.foo.example.com'.
> >>>
> >>> - Create a profile with the config:
> >>>
> >>>     
> >>> policyset.serverCertSet.<N>.constraint.class_id=subjectNameConstraintImpl
> >>>     policyset.serverCertSet.<N>.constraint.name=Subject Name Constraint
> >>>     policyset.serverCertSet.<N>.constraint.params.accept=true
> >>>     policyset.serverCertSet.<N>.constraint.params.pattern=CN=[^,]+,.+
> >>>     policyset.serverCertSet.<N>.default.class_id=subjectNameDefaultImpl
> >>>     policyset.serverCertSet.<N>.default.name=Subject Name Default
> >>>     
> >>> policyset.serverCertSet.<N>.default.params.name=CN=*.$request.req_subject_name.cn$,
> >>>  o=EXAMPLE.COM
> >>>
> >>> - Set up CA ACLs to constrain use of this profile for issuance only
> >>>   to hosts for which a wildcard cert *under* their hostname is
> >>>   allowed.
> >>>
> >>> - Issue wildcard cert.
> >>>
> >>> I'm not 100% sure if that last directive from the snippet above is
> >>> valid.  Worth a shot.
> >>
> >> This is exactly what I was looking for, as a workaround! Do you think you 
> >> would
> >> be able to try it (not necessarily right now, but in several days)? Just so
> >> that we know it would work.
> >>
> > It works.  I wrote it up in a blog post:
> > http://blog-ftweedal.rhcloud.com/2017/02/wildcard-certificates-in-freeipa/
> 
> I knew that will be a procedure like that! :-) Thanks for writing it down.
> 
> >>>> - how complex would it be to add support of Wildcard certificate support 
> >>>> to
> >>>> FreeIPA (rough scope).
> >>>>
> >>> It really depends on the answers to my earlier questions :)  Need to
> >>> know *exactly* what is needed for OpenShift in terms of how the
> >>> domain(s) to include in the cert relate to IPA domain or
> >>> host/service principals defined therein.
> >>
> >> We should not make feature too specific to OpenShift anyway, so I do not 
> >> think
> >> the answers to these questions need to come from OpenShift, but rather 
> >> from our
> >> understanding of how to make this feature useful for FreeIPA users.
> >>
> >> But if you check OpenShift documentation:
> >> https://docs.openshift.com/container-platform/3.4/install_config/router/default_haproxy_router.html#using-wildcard-certificates
> >> you will see that the domain for the wildcard is configurable. So AFAIK, 
> >> the
> >> OpenShift may join a realm EXAMPLE.COM and have the wildcard cert for
> >> '*.cloudapps.example.com.
> >>
> > After my exploration of what we can do with FreeIPA, I'd now be
> > surprised if we need to do anything else at all, besides perhaps
> > some official doc e.g. a KBase article.
> > 
> > Please pass the info along and see if the OpenShift folks are happy
> > with what they can do with a custom profile.
> 
> I will definitely pass this information.
> 
> As for any follow on FreeIPA side, I think it would be fine to add this
> procedure as an official FreeIPA Howto, just to make sure it does not
> disappear. I saw you linked it from
> http://www.freeipa.org/page/HowTos
> but I think it would make sense having this also on the official project wiki.
> 
I copied my blog post to the wiki (and updated the HowTos index):
https://www.freeipa.org/page/Howto/Wildcard_certificates

Cheers,
Fraser

-- 
Manage your subscription for the Freeipa-devel mailing list:
https://www.redhat.com/mailman/listinfo/freeipa-devel
Contribute to FreeIPA: http://www.freeipa.org/page/Contribute/Code

Reply via email to