[Development] OpenSSL certificate validation
Jake Petroules
jake.petroules at petroules.com
Wed Aug 14 09:45:26 CEST 2013
On Aug 14, 2013, at 3:32 AM, Florian Weimer <fweimer at redhat.com> wrote:
> On 08/13/2013 07:32 PM, Thiago Macieira wrote:
>> On terça-feira, 13 de agosto de 2013 19:11:16, Florian Weimer wrote:
>>> // Initialize peer verification.
>>> if (configuration.peerVerifyMode == QSslSocket::VerifyNone) {
>>> q_SSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, 0);
>>> } else {
>>> q_SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, q_X509Callback);
>>> }
>>>
>>> The same callback is used there. But if it's registered in this manner,
>>> it's not called by the OpenSSL while building the client certificate chain.
>>
>> Makes sense.
>>
>> I'm located in the US, so I'm not allowed to modify the SSL code. If you're in
>> the US, you're not either. And now here's an interesting question: are people
>> working for American companies allowed to modify the SSL code?
>
> That's a project policy question, not a legal question, right? :-)
Project policy yes, but the underlying reason is due to the wonderfully well thought-out
and useful US crypto export laws...
https://en.wikipedia.org/wiki/Export_of_cryptography_in_the_United_States
>>>> If there's a better API for it than a global callback that doesn't get a
>>>> context token passed, we're all ears
>>>
>>> You could use a multi-map with the X509_STORE_CTX * as the key instead
>>> of a list. The pointer should be available from the SSL_CTX via
>>> SSL_CTX_get_cert_store, and it should be specific to that SSL_CTX.
>>
>> Sorry, I'm not sure I understood that. Sounds like we still have a global.
>
> Yes, the map would still be global. But you would only have to lock it
> while adding and extracting individual values. The lock around the
> entire SSL handshake could go away, and at leat the current hazards are
> history.
>
>> I'd like to obtain the list of error conditions and for each condition the
>> associated certificate (or depth) without a global variable.
>
> You could associate the error list with the SSL * using the ex_data
> mechanism. The SSL * itself is available from
> X509_STORE_CTX_get_ex_data(ctx, SSL_get_ex_data_X509_STORE_CTX_idx()),
> if I'm reading the OpenSSL source code correctly. (I think this is also
> the pointer you should use for the map index, not the X509_STORE_CTX *
> because that's an internal object which is created during certificate
> verification).
>
> --
> Florian Weimer / Red Hat Product Security Team
> _______________________________________________
> Development mailing list
> Development at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/development
--
Jake Petroules
Chief Technology Officer
Petroules Corporation · www.petroules.com
Email: jake.petroules at petroules.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/development/attachments/20130814/58fe3691/attachment.html>
More information about the Development
mailing list