[Mono-list] Mono SSL server fails to send intermediate to client

Sebastien Pouliot sebastien.pouliot at gmail.com
Wed Apr 23 13:38:48 UTC 2014


On Wed, Apr 23, 2014 at 9:29 AM, Edward Ned Harvey (mono) <
edward.harvey.mono at clevertrove.com> wrote:

>  In SSL/TLS, the server is supposed to send a certificate chain to the
> client, to make the client easily validate the authenticity of the server
> from one of the client's trusted root CA's.  If the server doesn't send a
> chain, the client can make some level of effort trying to construct the
> chain, but each client implementation might perform that effort differently.
>
>
>
> I'm digging into this some more, but the observed behavior is:
>
>
>
> I'm using SslStream.  When I connect a mono client to a mono server, I can
> step through mono source on the client and I can see the server doesn't
> send the chain.  The client therefore checks root CA's but no intermediates,
>

That's already fixed in git.


> and therefore fails.
>

Not always, as you found out.


> (To be technically accurate, the server incorrectly sends a chain with
> zero items in it, which causes the client to *only* check root CA's with no
> intermediates.  The behavior would be different if the server had sent a
> "null" chain, in which case the mono client will execute different code,
> attempting to construct a chain, but I don't actually know if that other
> code would succeed or not.)
>
>
>
> My test program, with the exact same C# code with the exact same cert,
> running on windows server, actually sends the chain to the client,
> including a single item, which is the intermediate, and therefore, both
> windows & mono clients are able to authenticate the windows server with no
> problem.
>
>
>
> The mono server, connected with a windows client, presumably does not send
> the chain to the client (but I can't step through MS code to confirm this
> assumption), but the client is able to authenticate the server, so
> presumably the windows client makes more effort to construct the chain, or
> perhaps the client has some sort of pre-built chain in its list to
> check...  All I know is that it works.
>

That's because many clients will use their own stores (either in addition
or exclusively) to create the chain before validating the server
certificate.


>
>
> So the problem only exists with a mono server, connected to a mono client,
> when the server cert is signed by an intermediate.
>
>
>
> I'm rather amazed that I'm the first person to observe this, as every CA
> that I know of actually signs certs with intermediate authorities.  I'd
> like to ask the community:
>
>
>
> Do you run any mono SSL server, connected with mono SSL clients?  Does
> your server certificate include an intermediate chain?  Did you make your
> clients override a cert that the client would naturally reject from the
> server?  Did you tweak your client trusts, more than simply running
> mozroots, in order to make your intermediate chain work?
>
> _______________________________________________
> Mono-list maillist  -  Mono-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-list
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ximian.com/pipermail/mono-list/attachments/20140423/5482ac4c/attachment.html>


More information about the Mono-list mailing list