Re: CA validation

Paul Lesniewski <[email protected]> Sun, 19 Jan 2014 20:17:25 -0800
Newsgroups gmane.mail.squirrelmail.devel
Message-ID <CAHog115Gmas45yd8h8cGQOyM6RjCS9KG+=dJ-d8CxDG--fm4xg@mail.gmail.com>
On Sat, Nov 23, 2013 at 9:37 PM, Emmanuel Dreyfus <[email protected]> wrote:
> Squirrelmail has TLS support, but it lacks the ability to enforce server
> certificate validation. This leaves no defense against MiM attacks using
> a self-signed certificate.
>
> Here is how it could be fixed, for SMTP side. Connexion is established
> in class/deliver/Deliver_SMTP.class.php:
>
> $stream =
>     @fsockopen('tls://' . $host, $port, $errorNumber, $errorString);
>
> The stream_socket_client() function is an alternative to fsockopen()
> that appeared in PHP 5. It allows the caller to specify a context with
> various options:
>
> if (function_exists('stream_socket_client') {
>   $remote = sprintf("ssl://%s:%d", $host, port);
>   $opts = array(
>     'ssl' => array(
>       'verify_peer' => TRUE,
>       'verify_depth' => 5,
>       'cafile' => '/path/to/ca_file',
>     ),
>   );
>   $ctx = stream_context_create($opts);
>   $timeout = ini_get("default_socket_timeout");
>   $stream =
>     @stream_socket_client($remote, $errorNumber, $errorString,
>      $timeout, STREAM_CLIENT_CONNECT, $ctx);
> } else {
>   $stream =
>     @fsockopen('ssl://' . $host, $port, $errorNumber, $errorString);
> }
>
> Of course '/path/to/ca_file' needs to be configurable, I can work on
> this if the idea is accepted.
>
> Also note that I changed tls:// to ssl://. Inside the bowels of PHP,
> tls:// causes OpenSSL's TLSv1_client_method() to be used. As its name
> suggests, this metho can only negociate TLSv1.
>
> ssl:// causes SSLv23_client_method() to be used. As its named does not
> suggests, it is able to negociate the highest protocol version
> avaialble, up to TLSv1.2 if the installed OpenSSL supports it. This
> causes much stronger ciphers to be used.
>
> For now Squirrelmail's usage of tls:// can be worked around by
> specifying a ssl:// prefixed $smtpServerAddress with $use_smtp_tls =
> false, but switching the code to ssl:// would immediatly improve
> everyone setup.

Indeed. If you care to send a diff, I'd be happy to commit it.

> I did not look at the IMAP side since I use imapproxy, and therefore
> Squirrelmail is not incharge of IMAP TLS, but the idea is the same.

If you have the interest in addressing this, we'd appreciate it, but
if not, that's fine and I would be happy to take care of it.

-- 
Paul Lesniewski
SquirrelMail Team
Please support Open Source Software by donating to SquirrelMail!
http://squirrelmail.org/donate_paul_lesniewski.php

------------------------------------------------------------------------------
CenturyLink Cloud: The Leader in Enterprise Cloud Services.
Learn Why More Businesses Are Choosing CenturyLink Cloud For
Critical Workloads, Development Environments & Everything In Between.
Get a Quote or Start a Free Trial Today. 
http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk
-----
squirrelmail-devel mailing list
Posting guidelines: http://squirrelmail.org/postingguidelines
List address: [email protected]
List archives: http://news.gmane.org/gmane.mail.squirrelmail.devel
List info (subscribe/unsubscribe/change options): https://lists.sourceforge.net/lists/listinfo/squirrelmail-devel