Am 06.09.24 um 19:27 schrieb Martin Bartosch:

I think i know what's causing the observed behaviour.

The cert 013C522BCC6F5A2B.crt was first imported in realm xca. If i try to import the 
same cert into realm prodxca it fails with "Cert already exists", despite the 
fact, i specified different realms. import With update=1 changes the cert in realm xca, 
even if i specify realm=prodxca.

If I have an issuer cert in realm xca and import a cert signed by this issuer 
in realm prodxca the cert will be imported into realm xca, the issuer's realm. 
this is described in Server/API2/Plugin/Cert/import_certificate.pm but I'm not 
sure I understand the reasons for it. I expected, the realms are separated, 
certificates are only visible in the specified realm. Certs without realm are 
visible to all realms.

But pki_realm is not in the where clause, the check searches in all realms:

    # Check if the certificate is already in the PKI
    my $existing_cert = $dbi->select_one(
        from => 'certificate',
        columns => [ qw( identifier pki_realm status req_key ) ],
        where => { identifier => $cert_identifier },
    );

I quickly scanned the code and found more statements without pki_realm in the 
where clause, so it seems to be a design decision. Why are the certificates not 
separated by pki_realm?

You are correct, this is a design decision which incidentally I personally made 
around 2006 IIRC. The basic idea is that a certain certificate is unique, and 
hence should only be present in the database once. We actually enforce this by 
setting a unique index on the certificate identifier on the certificate table.

For end entity certificates I believe there is no case where this is actually a 
problem, in most cases OpenXPKI itself (or a remote issuer) issues the 
certificate which should by definition be unique.

However, there are cases where certificates from one PKI Realm is needed in 
another PKI Realm. In almost any case I can think of this will be a CA 
certificate, e. g. for building the certificate chain.
In order to cater for situations where a particular certificate existing in a 
different realm is needed in another realm, we introduced the idea of an alias. 
An alias is a named reference to an arbitrary certificate in any local PKI 
Realm. By setting an alias in the PKI Realm to a certificate in a different PKI 
Realm, you effectively allow the realm containing the alias to use the 
referenced certificate, and without violating the uniqueness requirement.

You are obviously trying to migrate existing data from an existing setup. The problems 
you encounter stem from conflicting imports into another PKI Realm. My recommendation is 
to work on a clean setup and avoid "fiddling with data" (this will also make 
sure that the resulting system is in a sane state). Once you are confident, perform this 
operation as a one-off import in the actual production environment. (This is how we do 
migrations of existing environments with our own tool set, anyway.)


Thanks Martin for the detailed explanation, much appreciated. You're correct, 
I'm trying to migrate existing data (for tracking and monitoring purposes only) 
and with the new knowledge about the design and how it works I know how to set 
it up.

Best,
-ap



_______________________________________________
OpenXPKI-users mailing list
OpenXPKI-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openxpki-users

Reply via email to