c++sslsspi

Compilable C++ code to implement a secure SLL/TLS client using MS SSPI


As described here http://www.ddj.com/cpp/184401688

I do not have time to write this from scratch.

Asked and not answered https://stackoverflow.com/questions/434961/implementing-ssl

THE QUESTION IS:

I am looking for some compilable working source code that implements MS SSPI (as alluded to in the thread above), procedural not OOP preferred.

I have looked at the code projects sample here:

http://www.codeproject.com/KB/IP/sslclasses.aspx

But this is C# OOP. Converting this to C++ code is not trivial.

OpenSSL

SChannel calls follow GSS API standards. There are, of course, some alternatives -- OpenSSL for example. This package is a complete and thorough implementation of the protocol and for someone all too familiar with UNIX is undoubtedly the best choice. The package originally targeted the UNIX community and to compile it relies on the Perl runtime, so some learning curve is required for Windows developers who never worked with UNIX-type systems.

Apart from that, OpenSLL does some very non-standard things

Nikolai, Having contibuted a lot of COMPILABLE source code (www.coastrd.com) I was hoping to find someone willing to do the same.


Solution

  • This SSPI SChannel SMTPS example should compile and run in Visual Studio 2008 as is

    http://www.coastrd.com/c-schannel-smtp (the original site seems dead; fortunately WaybackMachine has it archived)

    SChannel is the Microsoft implementation of the GSS API that wraps the SSL/TLS protocol.

    Advantages of utilizing SChannel:

    The code should produce a session that looks like this:

    ----- SSPI Initialized
    ----- WinSock Initialized
    ----- Credentials Initialized
    ----- Connectd To Server
    70 bytes of handshake data sent
    974 bytes of handshake data received
    182 bytes of handshake data sent
    43 bytes of handshake data received
    Handshake was successful
    ----- Client Handshake Performed
    ----- Server Credentials Authenticated

    Server subject: C=US, S=California, L=Mountain View, O=Google Inc, CN=smtp.gmail.com
    Server issuer: C=ZA, S=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Premium Server CA, E=premium-server@thawte.com

    ----- Certificate Chain Displayed
    ----- Server Certificate Verified
    ----- Server certificate context released

    Protocol: TLS1
    Cipher: RC4
    Cipher strength: 128
    Hash: MD5
    Hash strength: 128
    Key exchange: RSA
    Key exchange strength: 1024
    ----- Secure Connection Info
    64 bytes of (encrypted) application data received
    Decrypted data: 43 bytes
    220 mx.google.com ESMTP 6sm17740567yxg.66

    Sending 7 bytes of plaintext:
    EHLO

    28 bytes of encrypted data sent
    169 bytes of (encrypted) application data received
    Decrypted data: 148 bytes
    250-mx.google.com at your service, [22.33.111.222]
    250-SIZE 35651584
    250-8BITMIME
    250-AUTH LOGIN PLAIN
    250-ENHANCEDSTATUSCODES
    250 PIPELINING

    Sending 7 bytes of plaintext:
    QUIT

    28 bytes of encrypted data sent
    69 bytes of (encrypted) application data received
    Decrypted data: 48 bytes
    221 2.0.0 closing connection 6sm17740567yxg.66

    ----- SMTP session Complete
    Sending Close Notify
    23 bytes of handshake data sent
    ----- Disconnected From Server
    ----- Begin Cleanup
    ----- All Done -----