Sample code for 30+ languages & platforms
React Native Requires Chilkat v11.0.0+

Examine Client Certificates for an Accepted TLS Connection

See more Socket/SSL/TLS Examples

Demonstrates how to access the client certificates for a TLS connection accepted by your application acting as the server.

Chilkat React Native Downloads

React Native
import { Cert, Socket } from '@chilkat/react-native'

async function chilkatExample() {
  // This example requires the Chilkat API to have been previously unlocked.
  // See Global Unlock Sample for sample code.

  const listenSslSocket = new Socket();

  // An SSL/TLS server needs a digital certificate.  This example loads it from a PFX file.
  // This is the server's certificate.

  const cert = new Cert();
  try {
    cert.loadPfxFile('qa_data/serverCert/myServerCert.pfx', 'pfx_password');
  } catch {
    console.log(cert.lastErrorText);
    return;
  }

  // To accept client client certificates in the TLS handshake,
  // we must indicate a list of acceptable client certificate root CA DN's
  // that are allowed.  (DN is an acronym for Distinguished Name.)
  // Call AddSslAcceptableClientCaDn once for each acceptable CA DN.
  // Here are a few examples so you can see the general format of a DN.
  listenSslSocket.addSslAcceptableClientCaDn('C=SE, O=AddTrust AB, OU=AddTrust External TTP Network, CN=AddTrust External CA Root');
  listenSslSocket.addSslAcceptableClientCaDn('O=Digital Signature Trust Co., CN=DST Root CA X3');

  // Initialize with our server's TLS certificate.
  try {
    listenSslSocket.initSslServer(cert);
  } catch {
    console.log(listenSslSocket.lastErrorText);
    return;
  }

  // Bind and listen on a port:
  const myPort = 8123;
  // Allow for a max of 5 queued connect requests.
  const backLog = 5;
  try {
    await listenSslSocket.bindAndListenAsync(myPort, backLog);
  } catch {
    console.log(listenSslSocket.lastErrorText);
    return;
  }

  // Accept the next incoming connection.
  const maxWaitMillisec = 20000;

  const clientSock = new Socket();
  try {
    await listenSslSocket.acceptNextAsync(maxWaitMillisec, clientSock);
  } catch {
    console.log(listenSslSocket.lastErrorText);
    return;
  }

  // Examine the client certs chain.  The 1st cert will be the client certificate, and
  // the subsequent certs will be the certs in the chain of authentication.
  const numClientCerts = clientSock.numReceivedClientCerts;
  console.log(`numClientCerts = ${numClientCerts}`);

  const clientCert = new Cert();
  let i = 0;
  while (i < numClientCerts) {
    clientSock.getRcvdClientCert(i, clientCert);
    console.log(clientCert.subjectDN);
    i++;
  }

  // Close the connection with the client
  await clientSock.closeAsync(1000);
}