Client/Server-Zertifikat
In diesem Abschnitt wird der Fall betrachtet, dass sowohl Client- als auch Server-Zertifikat verifiziert werden. Der im Vergleich zum Server-Zertifikat-Kapitel leicht abgeänderte Kommunikationsablauf wird in der folgenden Grafik visualisiert. Die einzelnen Schritte des TLS-Verbindungsaufbaus sind im Kapitel Transportebene beschrieben.

Verwendung in TwinCAT
In TwinCAT wird im Falle der Verwendung eines Client-Zertifikats ebenso wie beim CA-Zertifikat der Dateipfad (.PEM- oder .DER-Datei) oder der Inhalt der .PEM-Datei als String übergeben. Dieses Zertifikat präsentiert TwinCAT als Client dann dem Server. Für das Certificate Verify muss zusätzlich der private Schlüssel des Clients referenziert werden. Optional kann im Falle eines Passwortschutzes für den privaten Schlüssel auch dieses Passwort übergeben werden. Der Beispielcode bezieht sich auf den HTTP-Client, den MQTT-Client und den WebSocket-Client, exemplarisch wird der HTTP-Client verwendet.
PROGRAM MAIN
VAR
fbClient : FB_IotHttpClient;
END_VAR
fbClient.stTLS.sCA:= 'C:\TwinCAT\3.1\Config\Certificates\someCA.pem';
fbClient.stTLS.sCert:= 'C:\TwinCAT\3.1\Config\Certificates\someCRT.pem';
fbClient.stTLS.sKeyFile:= 'C:\TwinCAT\3.1\Config\Certificates\someprivatekey.pem.key';
fbClient.stTLS.sKeyPwd:= 'yourkeyfilepasswordhere';
In dem Fall, dass ein Client-Zertifikat gesetzt ist, muss auch ein CA-Zertifikat zur Validierung des Server-Zertifikats gesetzt werden. Das ist durch das Verhalten des im IoT-Treiber verwendeten Security-Frameworks bedingt.
Wenn in diesem Fall die Validierung des Server-Zertifikats abgeschaltet werden soll, kann zusätzlich ein Flag zum Überspringen der Validierung gesetzt werden. Es ist aber nicht möglich, das CA-Zertifikat wegzulassen.