On Fri, Mar 21, 2003, Aleix Conchillo Flaque wrote:

> 
> First we need  to create a new extension  identifier (object identifier,
> OID) that will  identify the extension. The OID  is expressed in OpenSSL
> by the ASN1_OBJECT structure. In OpenSSL we create a new OID like this:
> 
>    /**
>     * First field is the OID itself, which will be converted to DER
>     * encoding. Next fields are the short and long description of
>     * this OID.
>     * Note that the descriptions will not be included as the
>     * extension identifier, but the DER encoding of the OID.
>     */
>     int nid = OBJ_create("1.2.3.4", "TestOID",
>                          "Long description TesT OID");
>     ASN1_OBJECT* obj = OBJ_nid2obj(nid);
> 

Creating a random OID is a bad idea. You should get a number assigned for your
organisation and use a subtree of that.

See:

http://www.iana.org/cgi-bin/enterprise.pl

If you, for example were allocated the number 9999 you could then use any OID
starting with 1.3.6.1.4.1.9999 such as 1.3.6.1.4.1.9999.1

> 
> Next step is  to create our custom X509 extension  identified by the OID
> created earlier. The  basic fields of an X509 extension  are: the OID, a
> boolean  saying  whether the  extension  is  critical  or not,  and  the
> extension data.  When an  extension is  critical it can  not be  read by
> applications who do not know anything about it. so in our case we should
> turn it to non-critical. Here is how we create our extension:
> 
>     /* Create data to be included in the extension */
>     ASN1_OCTET_STRING* data = ::ASN1_OCTET_STRING_new();
>     ASN1_OCTET_STRING_set(data, "our data", -1);
> 

Adding unstructured data to an extension is a violation of the various
standards. What you need to do instead is to add an encoded structure.

In many cases all that is wanted is a simple string. The easiest way to handle
that is to create an 'alias' to an already existing extension such as Netscape
comment which already uses a string. For example with:

X509V3_ext_add_alias(NID_netscape_comment, new_oid);

After this call the new oid behaves in the same way as Netscape comment and
the standard calls for extension creation can be used in doc/openssl.txt

An alternative technique would be to make use of the mini ASN1 compiler in
OpenSSL 0.9.8, this allows the standard configuration files to be used in a
human readable syntax. For example:

1.3.6.1.4.1.9999.1 = ASN1:IA5String:My Extension Value

Some people will not like the idea of using a development version of OpenSSL
in such a way so instead 0.9.8 can be used to just generate the encoding and
use that in a stable version of OpenSSL such as 0.9.7. 

Steve.
--
Dr Stephen N. Henson.
Core developer of the   OpenSSL project: http://www.openssl.org/
Freelance consultant see: http://www.drh-consultancy.demon.co.uk/
Email: [EMAIL PROTECTED], PGP key: via homepage.
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    [EMAIL PROTECTED]
Automated List Manager                           [EMAIL PROTECTED]

Reply via email to