There are as many as five ways to specify the locations of various significant 
files to openSSL:

  1. Command line arguments to ca and req,
  2. Configuration file entries for ca and req,
  3. Environment variable values to ca, req and the X509 subsystem,
  4. Programmatic defaults for ca, req and the X509 subsystem,
  5. Explicit application settings for the X509 subsystem.

Broadly, there are two distinct configurable components to openSSL:

  * Certificate maintenance (ca and req) which uses 1, 2, 3 and 4 above.
  * Certificate use (X509 subsystem) which uses 5, 3 and 4 above.

It seems as if the two major subsystems were written at different times, by 
different people, and the integration of 1-2 with 3-5 above was never fully 
attempted.

The result is that a user who is also a CA has too many possibly conflicting 
ways to specify the characteristics of their CA.

Problems:

  * It is impossible to make use of the generality of 1 and 2 when one is 
dealing with clients which will prefer 5-3, and may not provide any way to 
externally specify locations, and almost certainly will not provide a means of 
specifying them in accord with 1 and 2 (necessitating error-prone duplication 
of any values entered into 1 and 2.)

  * Methods 5-3 above have the advantage of speed and relative simplicity of 
implementation, however they do not have sufficient power to represent a fully 
configurable CA for the purpose of certificate maintenance.

  * Since the purpose of 1 and 2 could only be to ease configuration, and 
since 1 and 2 cannot readily configure certificate use, they fail in their 
general purpose by being inaccessible to certificate use.

It's necessary to decide upon the role of methods 1 and 2 above:
  Method 2 is used to define some things which can never be defined by another 
of the existing methods (such as details of X509 extensions, CA policies and 
Distinguished Name values) but which are of no interest to certificate use 
applications.
  Methods 1 and 2 are also used to define the CA's directory structure in a 
manner which cannot be communicated to certificate use applications.
    Either Methods 1 and 2 should permit no such definition, and be hard-coded 
(which would not work, as the certificate use applications can change this 
definition ad lib.)
    Or Method 2 access should be provided to certificate use applications.

Suggestions:

  * The client and server applications (certificate use applications relying 
on the X509 subsystem) should be provided with a higher level API which allows 
locations to be specified by reference to the configuration file (method 2 
above.)

  * Client and Server examples (and other certificate use applications) should 
be provided which utilise the new higher level API.

  * The interfaces 1 and 2 above should be made more regular, removing 
anomalies such as the inability to specify $ca::serial from the command line, 
when one can specify the $ca::new_certs_dir.)

  * ::oid_file's contents should be made a configuration Section, and the file 
should disappear.

Colin.


______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
Development Mailing List                       [EMAIL PROTECTED]
Automated List Manager                           [EMAIL PROTECTED]

Reply via email to