[Development] RFC: Managing the Addition of New SSL Backends
Peter Hartmann
phartmann at blackberry.com
Tue May 6 11:25:33 CEST 2014
Hello,
TL;DR: I think we can accept new backends if they support some minmal
client-side API, i.e. they succeed connecting when there are no errors
and fail if something goes wrong.
The big problem IMO is how to advertise to the developer what parts of
the API are supported and what not.
Some inline comments:
On 05/03/2014 11:23 PM, Richard Moore wrote:
> (...)
> - Very few applications use custom trust stores.
I would actually hope that this number increases for security reasons
("certificate pinning"), but most servers do not provide more
information there currently...
> (...)
> Another issue is displaying the certificate to the user. The
> QSslCertificate API is large, and whilst I think most backends would
> be able to provide most (if not all) of the facilities this is still a
> significant barrier. Instead, how about we allow QSslCertificate to be
> used as an opaque type for most apps? This could be done by providing
> access to the platform native (or a Qt provided) certificate
> dialog. This would reduce the requirements for the backend
> substantially.
I wonder whether the use case is that important; it would be beneficial
to have a way to display a certificate to a user, but apart from
browsers I usually don't see many apps using this feature (i.e. most
apps just correctly abort and display "SSL error", and some just proceed
anyway, which is bad security-wise).
>
> Simplifying the Cipher API
> ==========================
>
> Currently, the QSslCipher API is pretty large. It's not simply the
> code in the QSslCipher class itself, but also all the stuff in the
> QSslConfiguration that defines the preferences. Instead, we could
> offer a simplified API that all backends must offer. So, for example
> we could have something as simple as High, Medium and Low! After all,
> most people (including developers) don't know the trade-offs of the
> different cipher suites anyway. We could also have a flag for perfect
> forward secrecy since that is independent of the strength. It would
> also be possible to have a setting like FIPS for people who care about
> that.
Yes it sounds like a good idea to have something simpler for developers,
as probably nobody knows whether "ECDHE-ECDSA-AES256-GCM-SHA384" is
secure or not.
But yeah I think this is a separate discussion, as long as new SSL
backends have secure defaults.
> Proposed Capabilities
> =====================
>
> * SSL Client
>
> A backend offering this capability must offer the basic client-side
> QSslSocket API.
yes, so it should succeed connecting if everything is fine, and must
fail if something is wrong (e.g. untrusted certificate).
The problem is e.g. when somebody wants to trust only a specific
certificate or so and that part of the API is not supported.
I think all we can do here is to try to document this as good as
possible and issue run-time warnings for not supported methods. Also the
categories suggested below would help...
Peter
More information about the Development
mailing list