[openssl-users] X509_verify_cert cannot be called twice
szilard.pfeiffer at balasys.hu
Thu Mar 24 20:21:41 UTC 2016
On 2016-03-24 19:12, Viktor Dukhovni wrote:
>> On Mar 24, 2016, at 2:02 PM, DEXTER <mydexterid at gmail.com> wrote:
>> So let me get this straight.
>> If someone had a software where they called X509_verify_cert from
>> SSL_CTX_set_cert_verify_callback callback twice (to verify first with
>> crls, and maybe verify again without crls) and it worked as expected,
>> after this patch their software is broken.
> If they re-used the same X509_STORE_CTX, yes their software depended
> on undefined and likely insecure behaviour. "Worked as expected" is
> likely more along the lines of "did not appear to fail". Verification
> is not only expected to succeed for valid chains, but is also expected
> to reliably fail for invalid chains.
You are absolutely right in your last sentence, but an application which
should have expected (before the patch) that it does not get the error
code ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED, as it was permitted (according
to the documentation) to call the X509_verify_cert more than once. IMHO
an API compatible fix (1.0.1p was a security update) should consider
this, otherwise the undefined behavior shifted from the library to the
The problem what I try to explain is not just a theory. Consider the
situation when a function in an application tries to verify a
certificate by calling X509_verify_cert twice with different parameters
(it is a questionable, but a permitted way) during the handshake. It
works very well before the patch. After the patch the second call
returns error, so the function also returns error and the SSL handshake
fails. So a security update contains the patch breaks the application.
More information about the openssl-users