Encoding of AlgorithmIdentifier with NULL parameters
Richard Levitte
levitte at openssl.org
Sun Jan 31 22:21:00 UTC 2021
This was a good find, thank you all.
It's clearly a bug. Fix on GitHub, in PR #14030
(https://github.com/openssl/openssl/pull/14030)
Cheers,
Richard
On Thu, 28 Jan 2021 21:04:17 +0100,
Russ Housley wrote:
>
> [1 <text/plain; us-ascii (quoted-printable)>]
> [2 <text/html; us-ascii (quoted-printable)>]
> RFC 4055 says:
>
> The object identifier used to identify the PKCS #1 version 1.5
> signature algorithm with SHA-224 is:
>
> sha224WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 14 }
>
> The object identifier used to identify the PKCS #1 version 1.5
> signature algorithm with SHA-256 is:
>
> sha256WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 11 }
>
> The object identifier used to identify the PKCS #1 version 1.5
> signature algorithm with SHA-384 is:
>
> sha384WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 12 }
>
> The object identifier used to identify the PKCS #1 version 1.5
> signature algorithm with SHA-512 is:
>
> sha512WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 13 }
>
> When any of these four object identifiers appears within an
> AlgorithmIdentifier, the parameters MUST be NULL. Implementations
> MUST accept the parameters being absent as well as present.
>
> So, when generating the certificate, the NULL ought to be there.
>
> Also, when validating, the code should be forgiving about it not being there.
>
> Russ
>
> On Jan 28, 2021, at 2:07 PM, Thulasi Goriparthi <thulasi.goriparthi at gmail.com> wrote:
>
> I am trying to provide a test certificate generated by openssl-3.0.0-alpha10 to a third party
> certificate parser/manager. This software expects AlgorithmIdentifier to either have
> parameters or to have null encoded (05 00) parameters which seems to be missing in the
> certificate.
>
> Certificate generated by openssl-3.0.0-alpha10
>
> 0:d=0 hl=4 l=1030 cons: SEQUENCE
> 4:d=1 hl=4 l= 752 cons: SEQUENCE
> 8:d=2 hl=2 l= 3 cons: cont [ 0 ]
> 10:d=3 hl=2 l= 1 prim: INTEGER :02
> 13:d=2 hl=2 l= 1 prim: INTEGER :01
> 16:d=2 hl=2 l= 11 cons: SEQUENCE
> 18:d=3 hl=2 l= 9 prim: OBJECT :sha256WithRSAEncryption
> 29:d=2 hl=3 l= 143 cons: SEQUENCE
> 32:d=3 hl=2 l= 11 cons: SET
> 34:d=4 hl=2 l= 9 cons: SEQUENCE
> 36:d=5 hl=2 l= 3 prim: OBJECT :countryName
>
> Certificate generated by openssl-1.1.1g
>
> 0:d=0 hl=4 l= 988 cons: SEQUENCE
> 4:d=1 hl=4 l= 708 cons: SEQUENCE
> 8:d=2 hl=2 l= 3 cons: cont [ 0 ]
> 10:d=3 hl=2 l= 1 prim: INTEGER :02
> 13:d=2 hl=2 l= 1 prim: INTEGER :01
> 16:d=2 hl=2 l= 13 cons: SEQUENCE
> 18:d=3 hl=2 l= 9 prim: OBJECT :sha256WithRSAEncryption
> 29:d=3 hl=2 l= 0 prim: NULL
> 31:d=2 hl=3 l= 143 cons: SEQUENCE
> 34:d=3 hl=2 l= 11 cons: SET
> 36:d=4 hl=2 l= 9 cons: SEQUENCE
> 38:d=5 hl=2 l= 3 prim: OBJECT :countryName
>
> From https://tools.ietf.org/html/rfc5280#section-4.1.1.2, It isn't clear if NULL parameters
> can be completely omitted or if it should still have NULL encoding.
>
> Is this a too stringent check in the third-party s/w or a miss in openss-3.0.0-alpha10?
>
> Thanks,
> Thulasi.
>
>
--
Richard Levitte levitte at openssl.org
OpenSSL Project http://www.openssl.org/~levitte/
More information about the openssl-users
mailing list