Server-Zertifikat

Dieser Abschnitt behandelt den Fall, dass nur der Client das Server-Zertifikat verifizieren will, der Server aber das Client-Zertifikat nicht. Der Kommunikationsablauf aus dem Kapitel Transportebene verkürzt sich zu folgendem Ablauf.

Server-Zertifikat 1:

Verifikation des Server-Zertifikats

Das Server-Zertifikat wird auf Client-Seite verifiziert. Dabei wird überprüft, ob es von einer bestimmten Certificate Authority signiert ist. Ist das nicht der Fall, wird die Verbindung vom Client abgebrochen, da er dem Server dann nicht vertraut.

Verwendung in TwinCAT

In TwinCAT wird in dem Fall der Dateipfad zum CA-Zertifikat angegeben (.PEM oder .DER-Datei) oder der Inhalt der .PEM-Datei als String. Im IoT-Treiber wird dann das vom Server präsentierte Zertifikat überprüft. Wenn die Zertifikatskette nicht von der angegebenen CA signiert ist, wird die Verbindung zum Server abgebrochen. Der nachfolgende Code stellt nur exemplarisch die beschriebenen Verbindungsparameter dar. Der Beispielcode bezieht sich sowohl auf den HTTP- als auch auf den MQTT-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';

Hat der Benutzer das CA-Zertifikat nicht zur Verfügung, kann trotzdem eine Verbindung hergestellt werden. Dazu gibt es eine boolsche Variable, mit der TwinCAT die Verifikation des Server-Zertifikats verboten wird. Die Verbindung wird zwar mit dem öffentlichen Schlüssel des unverifizierten Server-Zertifikats verschlüsselt hergestellt, ist aber anfälliger gegen Man-in-the-middle-Attacken.

fbClient.stTLS.sCA.bNoServerCertCheck:= TRUE;