On Mon, Jun 13, 2016 at 12:48:18PM +0200, Martin Babinsky wrote:
> On 06/13/2016 08:59 AM, Jan Cholasta wrote:
> > On 13.6.2016 08:38, Fraser Tweedale wrote:
> > > On Fri, Jun 10, 2016 at 12:48:00AM +1000, Fraser Tweedale wrote:
> > > > On Thu, Jun 09, 2016 at 12:36:35PM +0200, Jan Cholasta wrote:
> > > > > On 9.6.2016 11:10, Fraser Tweedale wrote:
> > > > > > On Thu, Jun 09, 2016 at 10:12:40AM +0200, Jan Cholasta wrote:
> > > > > > > On 9.6.2016 08:44, Fraser Tweedale wrote:
> > > > > > > > On Thu, Jun 09, 2016 at 01:21:29AM +1000, Fraser Tweedale wrote:
> > > > > > > > > On Wed, Jun 08, 2016 at 01:00:36PM +0200, Jan Cholasta wrote:
> > > > > > > > > > On 8.6.2016 05:15, Fraser Tweedale wrote:
> > > > > > > > > > > On Tue, Jun 07, 2016 at 03:42:22PM +1000, Fraser Tweedale 
> > > > > > > > > > > wrote:
> > > > > > > > > > > > On Wed, Jun 01, 2016 at 02:51:04PM +1000, Fraser 
> > > > > > > > > > > > Tweedale wrote:
> > > > > > > > > > > > > Hi team,
> > > > > > > > > > > > > 
> > > > > > > > > > > > > This patchset implements the 'ca' plugin for creating 
> > > > > > > > > > > > > and
> > > > > > > > > > > > > managing
> > > > > > > > > > > > > lightweight sub-CAs, and updates the 'caacl' plugin 
> > > > > > > > > > > > > and
> > > > > > > > > > > > > 'cert-request' command to support multiple CAs.
> > > > > > > > > > > > > 
> > > > > > > > > > > > > A brief overview of the patches:
> > > > > > > > > > > > > 
> > > > > > > > > > > > > 0059
> > > > > > > > > > > > >   'ca' plugin, associated schema changes and 
> > > > > > > > > > > > > container objects,
> > > > > > > > > > > > >   Dogtag REST API wrapper
> > > > > > > > > > > > > 0060
> > > > > > > > > > > > >   Add CA entry for the IPA CA on install/upgrade
> > > > > > > > > > > > > 0061
> > > > > > > > > > > > >   Update 'caacl' plugin with CA support (including 
> > > > > > > > > > > > > enforcement)
> > > > > > > > > > > > > 0062
> > > > > > > > > > > > >   Update ra.request_certificate() to support 
> > > > > > > > > > > > > specifying
> > > > > > > > > > > > > target CA
> > > > > > > > > > > > > 0063
> > > > > > > > > > > > >   Add '--ca' option to 'cert-request' command
> > > > > > > > > > > > > 0064
> > > > > > > > > > > > >   Add '--issuer' option to 'cert-find' command
> > > > > > > > > > > > > 
> > > > > > > > > > > > > These patches depend on other pending patches:
> > > > > > > > > > > > > 
> > > > > > > > > > > > >     0051, 0052, 0053, 0054, 0055, 0056
> > > > > > > > > > > > > 
> > > > > > > > > > > > > Signing key replication depends on unmerged Dogtag 
> > > > > > > > > > > > > patches.
> > > > > > > > > > > > > Builds
> > > > > > > > > > > > > of Dogtag with the required patches, and of FreeIPA 
> > > > > > > > > > > > > with all
> > > > > > > > > > > > > completed sub-CAs work, should be available from my 
> > > > > > > > > > > > > COPR soon:
> > > > > > > > > > > > > https://copr.fedorainfracloud.org/coprs/ftweedal/freeipa/
> > > > > > > > > > > > > 
> > > > > > > > > > > > > Some parts of the design are not implemented in the 
> > > > > > > > > > > > > current
> > > > > > > > > > > > > patchset, including:
> > > > > > > > > > > > > 
> > > > > > > > > > > > > - local parent CA (ipaca object) references
> > > > > > > > > > > > > - sub-CA certificate renewal
> > > > > > > > > > > > > - 'cert-show' command '--ca=NAME' option
> > > > > > > > > > > > > - certmonger support for specifying CA
> > > > > > > > > > > > > - revocation of deleted CAs
> > > > > > > > > > > > > 
> > > > > > > > > > > > > I look forward to your reviews!
> > > > > > > > > > > > > 
> > > > > > > > > > > > > Thanks,
> > > > > > > > > > > > > Fraser
> > > > > > > > > > > > > 
> > > > > > > > > > > > Rebased and updated patches attached.
> > > > > > > > > > > > 
> > > > > > > > > > > > Substantive changes:
> > > > > > > > > > > > 
> > > > > > > > > > > > - add required attributes for issuer DN and subject DN
> > > > > > > > > > > > - prevent rename of IPA CA
> > > > > > > > > > > > - when adding IPA CA entry, contact Dogtag to learn 
> > > > > > > > > > > > authority
> > > > > > > > > > > > id,
> > > > > > > > > > > >   issuer DN and subject DN
> > > > > > > > > > > > - add 'read_ca' method to Dogtag interface
> > > > > > > > > > > > - tighten ACIs to prevent modification of ipacaid 
> > > > > > > > > > > > attribute
> > > > > > > > > > > > 
> > > > > > > > > > > Updated patch 0064-3; adds --issuer option to cert-show 
> > > > > > > > > > > and --ca
> > > > > > > > > > > option to cert-show and cert-find.
> > > > > > > > > > 
> > > > > > > > > > Patch 0059:
> > > > > > > > > > 
> > > > > > > > > > 1) On upgrade, why is the lightweight CA container created
> > > > > > > > > > twice - once in
> > > > > > > > > > 41-subca.update, once using ensure_entry() call? It should 
> > > > > > > > > > be
> > > > > > > > > > done only
> > > > > > > > > > once.
> > > > > > > > > > 
> > > > > > > > > I'll remove 41-subca.update; the routine in cainstance is the 
> > > > > > > > > one
> > > > > > > > > that's needed.
> > > > > > > > > 
> > > > > > > > > > 2) In ca_del, every CA specified in args[0] should be 
> > > > > > > > > > deleted,
> > > > > > > > > > not just the
> > > > > > > > > > first one.
> > > > > > > > > > 
> > > > > > > > > > 3) Do not use NonFatalError, issue a warning instead:
> > > > > > > > > > 
> > > > > > > > > >     self.add_message(MyNewWarningClass(name=...))
> > > > > > > > > > 
> > > > > > > > > > 4) Can it actually happen that ca_show does not return 
> > > > > > > > > > ipacaid?
> > > > > > > > > > I guess not,
> > > > > > > > > > so you should be able to remove the check altogether and 
> > > > > > > > > > don't
> > > > > > > > > > bother with
> > > > > > > > > > the warning.
> > > > > > > > > > 
> > > > > > > > > ipacaid is mandatory now, so I'll remove the check.
> > > > > > > > > 
> > > > > > > > > > 
> > > > > > > > > > Patch 0060-0062: LGTM
> > > > > > > > > > 
> > > > > > > > > Yippee \o/
> > > > > > > > > 
> > > > > > > > > > 
> > > > > > > > > > Patch 0063:
> > > > > > > > > > 
> > > > > > > > > > Could you please define the CA param as follows:
> > > > > > > > > > 
> > > > > > > > > >     Str('cacn?',
> > > > > > > > > >         cli_name='ca',
> > > > > > > > > >         query=True,
> > > > > > > > > >         label=_("CA"),
> > > > > > > > > >         doc=_("CA to use"),
> > > > > > > > > >     ),
> > > > > > > > > > 
> > > > > > > > > > ?
> > > > > > > > > > 
> > > > > > > > > > This is for consitency with framework-generated parent key
> > > > > > > > > > params, which
> > > > > > > > > > unfortunately we cannot leverage in cert_request currently.
> > > > > > > > > > 
> > > > > > > > > No problemo.
> > > > > > > > > 
> > > > > > > > > > 
> > > > > > > > > > Patch 0064:
> > > > > > > > > > 
> > > > > > > > > > 1) See my comment for patch 0063, it applies here as well.
> > > > > > > > > > 
> > > > > > > > > > 2) The --issuer option should not be included in cert_show -
> > > > > > > > > > show commands
> > > > > > > > > > are supposed to retrieve an object given primary key(s), and
> > > > > > > > > > the primary key
> > > > > > > > > > of CA objects is just their cn.
> > > > > > > > > > 
> > > > > > > > > The --issuer argument is because primary key for a cert is 
> > > > > > > > > really
> > > > > > > > > (issuer, serial).  So it show the cert _with_ that issuer (and
> > > > > > > > > serial), not the cert _for_ that issuer.
> > > > > > > 
> > > > > > > Correct, but in IPA the issuer is represented by the CA object, so
> > > > > > > in IPA
> > > > > > > the primary key for a certificate is actually (CA name, serial).
> > > > > > > 
> > > > > > > Certificate lookup by issuer name and serial is actually a search
> > > > > > > operation,
> > > > > > > analogical to how CA lookup by subject name is also a search
> > > > > > > operation, so
> > > > > > > it should be done by cert-find.
> > > > > > > 
> > > > > > OK, I will remove the --issuer option for cert-find.
> > > > > > 
> > > > > > > > > 
> > > > > > > > > > 3) In find commands, the options form a filter, so instead 
> > > > > > > > > > of
> > > > > > > > > > raising
> > > > > > > > > > MutuallyExclusiveError in cert-find, return an empty 
> > > > > > > > > > result, as
> > > > > > > > > > with any
> > > > > > > > > > other unmatched filter.
> > > > > > > > > > 
> > > > > > > > > Here, --issuer and --ca are two different ways to specify the
> > > > > > > > > issuer.  --issuer lets you give the issuer DN straight up; 
> > > > > > > > > --ca
> > > > > > > > > takes the name of an IPA CA object and looks up its issuer DN.
> > > > > > > > > (Thus it makes no sense to give both options at once).
> > > > > > > 
> > > > > > > That's one way to look at it, but it's true only if you assume 
> > > > > > > that
> > > > > > > cert-find can only search certificates in Dogtag. This will very
> > > > > > > soon became
> > > > > > > untrue, as we will allow cert-find to also search certificates
> > > > > > > anywhere in
> > > > > > > LDAP (the server part of ticket #5381). There, the difference
> > > > > > > between the
> > > > > > > options would be that with --ca you search for certificates issued
> > > > > > > by the
> > > > > > > specified managed CA, but with --issuer you search for
> > > > > > > certificates with the
> > > > > > > given issuer name, be it managed CA or not.
> > > > > > > 
> > > > > > --ca is just a "shorthand" for --issuer - it merely looks up subject
> > > > > > DN of the specified CA, and uses that as the issuer option.
> > > > > > 
> > > > > > > For now, IMO the correct behavior should be that if both are
> > > > > > > specified and
> > > > > > > the issuer name of the specified CA does not match the specified
> > > > > > > issuer
> > > > > > > name, empty result is returned, otherwise carry on with the 
> > > > > > > search in
> > > > > > > Dogtag.
> > > > > > > 
> > > > > > If I allow both, the behaviour will then be:
> > > > > > 
> > > > > > specify issuer DN only)
> > > > > >     search using given issuer DN
> > > > > > specify CA only)
> > > > > >     search using subject DN of specified CA.  If no such CA, error.
> > > > > > specify issuer DN and CA)
> > > > > >     search using given issuer DN, and ensure that result (if any)
> > > > > >     matches subject DN of specified CA.  If no such CA, error.
> > > > > > 
> > > > > > I'm happy to implement this if you confirm that you think it's the
> > > > > > correct behaviour.
> > > > > 
> > > > > Looks correct to me.
> > > > > 
> > > > Thanks; updated patches attached.  Martin, this patch should also
> > > > fix the upgrade issue.
> > > > 
> > > > Cheers,
> > > > Fraser
> > > > 
> > > Another rebase to fix conflicts in VERSION file.  No other changes.
> > 
> > Thanks.
> > 
> > The remaining cert commands (status, revoke, remove-hold) should also
> > have the cacn option consistent with cert-show. This can be added in
> > further patch, though.
> > 
> > I think it would make sense if the cn argument in ca commands was
> > optional, with the default being 'ipa'. This can also be done later.
> > 
> > So LGTM. If Martin agrees, we can push this patch set.
> > 
> 
> Hi Fraser,
> 
> during functional review I found the following issues:
> 
> 1.)
> 
> If I create a CAACL rule tied to a specific sub-CA let's say for user
> certificate issuance:
> 
> """
> ipa caacl-show user_cert_issuance
>   Enabled: TRUE
>   User category: all
>   CAs: user_sub_ca
>   Profiles: caIPAuserCert
>   ACL name: user_cert_issuance
> 
> """
> 
> I can still happily request certificate for a user using root-CA:
> 
> """
>  ipa cert-request cert.csr --principal jdoe --ca ipa
>   Certificate: MIID9j.../Ov8mkjFA==
>   Subject: CN=jdoe,O=IPA.TEST
>   Issuer: CN=Certificate Authority,O=IPA.TEST
>   ...
> """
> 
> should not this be denied by CA-ACL rule?
> 
> The default IPA CAACL rule is like this:
> 
> """
> ipa caacl-show hosts_services_caIPAserviceCert
>   Enabled: TRUE
>   Host category: all
>   Service category: all
>   Profiles: caIPAserviceCert
>   ACL name: hosts_services_caIPAserviceCert
> 
> """
> 
> so the default rule should not allow users to request certs at all.
> 
Yes, these should be denied.  Looking into it.

> 2.)
> 
> The '--chain' option in cert-show/cert-request is not implemented, but this
> was probably a deliberate decision. We should however at least open a ticket
> about this and add it later.
> 
Yes, it will be added in a later patch.

> 3.)
> 
> I cannot issue a user certificate on a replica with configured CA:
> 
> """
> [root@replica1 ~]# ipa cert-request cert.csr --ca user_sub_ca --principal
> jrogan
> ipa: ERROR: Certificate operation cannot be completed: FAILURE (CA not
> found: bc953851-1f24-4e16-9847-9ee5bbe6dd0e)
> [root@replica1 ~]# ipa ca-find user_sub_ca
> ------------
> 1 CA matched
> ------------
>   Name: user_sub_ca
>   Description: CA for issuing user certificates
>   Authority ID: bc953851-1f24-4e16-9847-9ee5bbe6dd0e
>   Subject DN: CN=User Cert Sub-CA,O=IPA.TEST
>   Issuer DN: CN=Certificate Authority,O=IPA.TEST
> ----------------------------
> Number of entries returned 1
> ----------------------------
> [root@replica1 ~]# ipa cert-request cert.csr --ca user_sub_ca --principal
> jrogan
> ipa: ERROR: Certificate operation cannot be completed: FAILURE (CA not
> found: bc953851-1f24-4e16-9847-9ee5bbe6dd0e)
> """
> 
> The LDAP entry is there, but it seems like the sub-CA was not replicated at
> the dogtag backend. This occurs regardless of whether the master was freshly
> installed or upgraded from 4.3.1 release.
> 
Can you please tell me the version of Dogtag packages on each of the
machines?  Could you please also provide
/var/log/pki/pki-tomcat/ca/debug from the replica?

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