[ldns-users] OpenSSL context configuration
Willem Toorop
willem at nlnetlabs.nl
Thu Feb 6 11:04:15 UTC 2020
This is very insightful, thanks! Would it be possible for you to turn
these recommendations into a pull request on our github repo?
i.e.: https://github.com/NLnetLabs/ldns
Op 05-02-2020 om 17:27 schreef Jeffrey Walton via ldns-users:
> Hi Everyone,
>
> I was looking at the code used to configure a context.
> SSL_CTX_new(TLS_client_method()) is good to see. I have three feedback
> items.
>
> First, when using TLS_client_method(), also use SSL_OP_NO_SSLv3.
> TLS_client_method() allows SSLv3. There's no need for SSLv3 nowadays.
> SSL_OP_NO_SSLv3 gets set on the resulting context object:
>
> ssl_ctx = SSL_CTX_new(TLS_client_method());
> long flags = SSL_OP_NO_SSLv3;
> SSL_CTX_set_options(ssl_ctx , flags);
>
> Second, use SSL_OP_NO_COMPRESSION if possible. CRIME and BREACH showed
> higher level protocols like HTTPS can leak information. There's no
> sense in adding the attack surface when compression is not needed.
> SSL_OP_NO_COMPRESSION gets set on the resulting context object:
>
> ssl_ctx = SSL_CTX_new(TLS_client_method());
> long flags = SSL_OP_NO_SSLv3 | SSL_OP_NO_COMPRESSION ;
> SSL_CTX_set_options(ssl_ctx , flags);
>
> You might also look for badly configured TLS clients. These come from
> folks who don't pay attention to configuration options in OpenSSL
> 1.0.1 and 1.0.2 (they are disabled by default in OpenSSL 1.1.x):
>
> long flags = 0;
> #ifdef SSL_OP_NO_SSLv2
> flags |= SSL_OP_NO_SSLv2;
> #endif
> #ifdef SSL_OP_NO_SSLv3
> flags |= SSL_OP_NO_SSLv3 ;
> #endif
> #ifdef SSL_OP_NO_COMPRESSION
> flags |= SSL_OP_NO_COMPRESSION ;
> #endif
>
> Third, use X509_V_FLAG_PARTIAL_CHAIN if possible. This allows someone
> to root trust in an intermediate CA of their choosing, like Let's
> Encrypt. Without X509_V_FLAG_PARTIAL_CHAIN , one needs to accept the
> additional risk of the entire PKI of ISRG and IdentTrust. (Let's
> Encrypt is an intermediate certificate, and it is cross-certified by
> ISRG and IdentTrust).
>
> Most often then not in the HTTPS world, X509_V_FLAG_PARTIAL_CHAIN is
> not used and the entire CA Zoo from cacert.pem is used. That means
> users are accepting risk from the entire PKI of 137 CAs - client
> certs, server certs, code signing certs, etc.
>
> Being overly permissive in the trust department allowed Diginotar to
> MitM Google users and other users. More recently Symantec was kicked
> out of the Chrome and Mozilla CA program because they were issuing
> certs for domains not under their administrative control. The failures
> happen in practice.
>
> To use X509_V_FLAG_PARTIAL_CHAIN , set the flag with
> X509_VERIFY_PARAM_set_flags.
>
> Jeff
> _______________________________________________
> ldns-users mailing list
> ldns-users at lists.nlnetlabs.nl
> https://lists.nlnetlabs.nl/mailman/listinfo/ldns-users
>
More information about the ldns-users
mailing list