Search code examples
javassltls1.2sslengine

How to test an implementation of TLS based on SSLEngine?


I'm considering the possibility to implement TLS over a non TCP connection. The idea is to use SSLEngine which provides the possibility encrypt/decrypt data to memory buffers and send them by the reliable transport we want.

I would have to implement all the handshake defined by the SSL Protocol (client hello, server hello...etc).

If I do this, how would I test that my implementation is working? Is there some "official TLS Test Suite" that I could run?

Thanks for your advices


Solution

  • The fact that you explicitely exclude TCP makes things more complicated. TLS has some assumption about how the underlying transport works. You can have a look at how QUIC basically provides TLS over UDP and the constraints of it.

    As for official "Test Suite" I have some ideas to offer, that will probably not work as is out of the box, because of the TCP dependency but they could be a start:

    At a more abstract level (I do not know if they are tools using that, but they may exist), when TLS 1.3 was drafted at the same time a document was created to collect typical handshake messages, so that you can use them as examples.

    Find it here: https://datatracker.ietf.org/doc/draft-ietf-tls-tls13-vectors/

    Its abstract is:

    Examples of TLS 1.3 handshakes are shown. Private keys and inputs are provided so that these handshakes might be reproduced.
    Intermediate values, including secrets, traffic keys and IVs are
    shown so that implementations might be checked incrementally against
    these values.