[ssh_x509] Certificate Procedures and Test Program

ssh_x509 at roumenpetrov.info ssh_x509 at roumenpetrov.info
Thu May 9 19:49:13 EEST 2019

ssh_x509 at roumenpetrov.info wrote:
> Thank you,
>     In the README.x509v3 file under the "X509 store" options, what is the
> difference between *CACertificatePath* and *CACertificateFile* because
> the CACertificateFile is not under the path directory pointed by
> CACertificatePath.
So this is due to program implementation in cryptographic library. 
Lookup method are described in manual pages X509_LOOKUP_file(3) or 
X509_LOOKUP_hash_dir(3) - one and the same page.
OpenSSL command is verify.
So "...file..." and "...path..." are common options for various products 
that use certificates ( https://roumenpetrov.info/domino_CA/ ) and 
cryptographic library is OpenSSL. Page is outdated and lack programs 
like curl (--cacert/--capath) wget (--ca-certificate=/--ca-directory=).

Also please see -untrusted option of openssl verify command in more 
recent versoins (1.1+). Compare with -trusted, and -CAfile, and -CApath.

Cert/crl obtained for -CAfile and -CApath are part of trusted 
"certificate store", -untrusted simulate "intermediate" and etc.

> The definition says "certificates of certificate signers" , I believe this
> means to verify the chain of certificates. and I do have one, a Root and
> Intermediate concatenated ( bundled ), so now I am confused where to keep
> my bundle?

This depend from algorithms.

(A) In brief for "legacy" remote has to keep root and intermediate as on 
wire is send only client cert..
Remote means server (sshd) in X.509 public keys or client (ssh) for 
X.509 host-key.

(B) For "new" format (rfc6187 ) remote could contain only root as on 
wire. Local is responsible to construct "chain" with client and 
intermediate and to send on wire.
Remark: local means client(ssh) for public keys and daemon (sshd) for 
Local construct chain using certificates for identity/host-key file and 
those from "certificate store".

Why from both? For compatibility. With setup from (A) you could use both 
algorithms formats in all cases.

1. Server accepts only rfc6187 format.
In CA file/directory keep just root.
Clients should have intermediates from PKCS#12 file.

2. Server accepts legacy and rfc6187 format (default).
In CA file/directory keep root and intermediate.
Outdated clients like those form ssh.com could connect to this server .

> To me CACertificateFile feels like appropriate. in that case
> what is the use of CACertificatePath.
No difference - see above.

> Similar confusion between CARevocationFile and CARevocationPath.

PKIX-SSH implements revocation check before OpenSSL and my decision was 
to separate certificate from crl. OpenSSL implements later and decide to 
use same options.

This explain why exists separate "revocation" store.

"revocation" is more tricky to explain. Perhaps this 
could help.

If you use OpenSSL 1.0.0+ "directory" format is recommended for crl.
For version before (up to 0.9.8zh) there is no difference.

> Please clarify.
> Regards,
> Srini.


More information about the ssh_x509 mailing list