Hi,

On Wed, 18 Jul 2018, 00:15 Dominic Luechinger, <dol+...@snowgarden.ch>
wrote:

> I'd like to improve the openssl_csr_new function to add any X509
> "Requested Extensions" [1] to a CSR.
> My motivation to improve this functionality is to avoid workarounds like
> altering a openssl.cnf file and pass some ENV variable to it [2].
>
> I already implemented the following new functionality:
>
> Old:
> mixed openssl_csr_new ( array $dn , resource &$privkey [, array
> $configargs [, array $extraattribs ]] )
>
> New (I can provide a patch, needs cleanup and testing):
> mixed openssl_csr_new ( array $dn , resource &$privkey [, array
> $configargs [, array $extraattribs[, array $extraexts ]]] )
>
> E.g:
> ```
> $privkey = openssl_pkey_new();
> $csr = openssl_csr_new([], $privkey, null, [], [
>     'subjectAltName' => 'DNS:example.tld',
> ]);
>
> ```
>
> While implementing the new functionality I realized that the 'Requested
> Extensions' are represented as a CSR attribute and it contains the ASN1
> structure of multiple extensions and their definitions. With the
> following example the declaration of the extension should be possible
> without the new argument $extraexts in openssl_csr_new.
>
> ```
> $privkey = openssl_pkey_new();
> // Use OID of ExtensionRequest
> $csr = openssl_csr_new([], $privkey, null, ['1.2.840.113549.1.9.14' =>
> 0xDEADBEEF]);
> ```
>
> This won't work because the argument $extraattribs only applies to
> subject attributes. The argument name is kind of misleading. See the
> following bug report [3] from 2008 that describes the issue in a good
> manor. IMHO this bug report is valid and the bug should be fixed in a
> way that the attributes are added to the certificationRequestInfo [4]
> instead being merged into the subject. This might break some existing
> usage of this argument. With this bug fixed 'Requested Extensions' can
> be added in a programmatic way. To generate the DER encoded content of
> 'Requested Extensions' a ASN1 library should be used.
>
>
> Now comes to tricky part about supporting my initial goal to add
> additional'Requested Extensions' to an CSR.
>
> Should I summit my patch with the extra argument as a PR or should I fix
> the bug 45076 or should I do both?
>
> extraexts VS bug fix:
> - No BC break VS BC break
> - No need for a ASN1 library VS working with ASN1 DER encoded data
> - Default extensions from openssl.cnf are preserved and can be
> overwritten VS definition of 'Requested Extensions' in DER overwrites
> default extensions from openssl.cnf
>
> Looking at the pros and cons my guts tells my to do both. Patch and bug
> fix.
> Any other suggestions/thoughts?
>

I haven't had time to properly look into it but from the quick read, I
would prefer not to break BC even though the behaviour seems incorrect. I
think that changing that can cause some issues potentially. But I might
need more time to think about. Anyway the proposed patch seems reasonable
so it would be great if you can create a PR that.

Cheers

Jakub

>

Reply via email to