Sample code for 30+ languages & platforms
Unicode C

Configure a Socket for Server-Side TLS

See more Socket/SSL/TLS Examples

Demonstrates Socket.InitSslServer, which configures the object for server-side TLS using a server certificate that has access to its private key, then listens for and accepts a TLS connection.

The file path is relative to the application's current working directory. An absolute path may also be used. Supply the path appropriate to your own environment.

Background. A TLS listener presents the configured server certificate during the handshake. When client certificates are required, acceptable CA distinguished names are added before InitSslServer.

Chilkat Unicode C Downloads

Unicode C
#include <C_CkSocketW.h>
#include <C_CkCertW.h>

void ChilkatSample(void)
    {
    BOOL success;
    HCkSocketW socket;
    const wchar_t *pfxPassword;
    HCkCertW cert;
    HCkSocketW connectedSock;

    success = FALSE;

    socket = CkSocketW_Create();

    //  The file path is relative to the application's current working directory.  An absolute path
    //  may also be used.  Supply the path appropriate to your own environment.
    //  The PFX password should come from a secure source rather than being hard-coded.
    pfxPassword = L"myPfxPassword";
    cert = CkCertW_Create();
    success = CkCertW_LoadPfxFile(cert,L"qa_data/server.pfx",pfxPassword);
    if (success == FALSE) {
        wprintf(L"%s\n",CkCertW_lastErrorText(cert));
        CkSocketW_Dispose(socket);
        CkCertW_Dispose(cert);
        return;
    }

    //  Configure this object for server-side TLS using the certificate.  The certificate must have
    //  access to its corresponding private key.
    success = CkSocketW_InitSslServer(socket,cert);
    if (success == FALSE) {
        wprintf(L"%s\n",CkSocketW_lastErrorText(socket));
        CkSocketW_Dispose(socket);
        CkCertW_Dispose(cert);
        return;
    }

    //  Listen for connections.  Accepted connections will use TLS.
    success = CkSocketW_BindAndListen(socket,5000,25);
    if (success == FALSE) {
        wprintf(L"%s\n",CkSocketW_lastErrorText(socket));
        CkSocketW_Dispose(socket);
        CkCertW_Dispose(cert);
        return;
    }

    connectedSock = CkSocketW_Create();
    success = CkSocketW_AcceptNext(socket,20000,connectedSock);
    if (success == FALSE) {
        wprintf(L"%s\n",CkSocketW_lastErrorText(socket));
        CkSocketW_Dispose(socket);
        CkCertW_Dispose(cert);
        CkSocketW_Dispose(connectedSock);
        return;
    }

    wprintf(L"Accepted a TLS client connection.\n");


    CkSocketW_Dispose(socket);
    CkCertW_Dispose(cert);
    CkSocketW_Dispose(connectedSock);

    }