-

TLS_SOCKET_2

Der Funktionsbaustein TLS_SOCKET_2 ist eine neuere Implementierung des TLS_SOCKET-FB, kombiniert mit dem FB TCP_SOCKET (welche in diesem Hilfethema als "ältere Implementierungen" bezeichnet werden). Der Unterschied zwischen der neuen und der älteren Implementierung ist, dass TLS_SOCKET_2 die Handhabung von TCP und TLS in einem FB kombiniert: seine Eingangsparameter legen fest, ob das TLS-Protokoll auf der Basis von TCP initialisiert und verwendet wird. Außerdem unterstützt er TCP/TLS-Server, die mit mehreren TCP/TLS-Clients kommunizieren können.

Sockethandles, die mit TLS_SOCKET_2 erzeugt wurden, können nur mit den Funktionsbausteinen TLS_SEND_2 und TLS_RECEIVE_2 verwendet werden.

Hinweis
Dieser Funktionsbaustein erfordert die Firmware-Version 2021.3 oder neuer.

Hinweis
Um in einem bestehenden Projekt Instanzen der früheren FB-Implementierung durch neuere FBs zu aktualisieren, ersetzen Sie diese wie folgt: Editieren Sie die Deklaration der Instanzvariablen und (nur in FBD) aktualisieren Sie den Instanzaufruf im Code. Formalparameter mit gleichem Namen bleiben verbunden, neu hinzugefügte Formalparameter müssen verbunden werden (falls deren Funktion benötigt wird).

TypFunktionsbaustein
BeschreibungDer Funktionsbaustein öffnet und schließt einen TCP/TLS-Socket. (Das TLS-Protokoll arbeitet auf der Basis des TCP). Dieser Socket kann entweder für die Standard-TCP-Kommunikation verwendet werden, oder für die sichere IP-Kommunikation zwischen einem Server und einem Client über TLS (Transport Layer Security).

Der TCP/TLS-Socket wird durch den Ausgangsparameter HANDLE repräsentiert. Dieses Handle muss an die Funktionsbausteine TLS_SEND_2 und TLS_RECEIVE_2 übergeben werden. Die FBs benötigen das Sockethandle für den (sicheren) Datenaustausch mit einem Kommunikationspartner.

Wird ein Server implementiert, der mit mehreren TCP/TLS-Clients kommunizieren kann, so ist eine TLS_SOCKET_2-Instanz (mit IS_SRV = TRUE) für jeden vorhandenen Client erforderlich. In diesem Szenario verbinden sich die Clients mit der jeweiligen TLS_SOCKET_2-Instanz/HANDLE, wie an DEST_IP/DEST_PORT spezifiziert.

Mit einer steigenden Flanke am Eingang ACTIVATE wird begonnen, einen TCP/TLS-Socket zu öffnen. Bei erfolgreichem Öffnen des Sockets und Verbindungsaufbau wird der Ausgang ACTIVE auf TRUE gesetzt. Solange ACTIVE = TRUE ist, kann das Sockethandle am Ausgang HANDLE für den Aufruf der Funktionsbausteine TLS_SEND_2/TLS_RECEIVE_2 verwendet werden.

Eine fallende Flanke an ACTIVATE schließt den Socket. Die Verbindung wird mittels eines Drei-Wege-Handshake beendet, d.h. es werden drei Telegramme zwischen Client und Server ausgetauscht. Während des Beendungsprozesses führt eine erneute steigende Flanke zu einem Bausteinfehler.

Während ACTIVE = FALSE, führt das Aufrufen von TLS_SEND_2/TLS_RECEIVE_2 mit dem Sockethandle zu einem Fehler an den Funktionsbausteinen. Solange der ACTIVATE-Eingang gesetzt ist, bleibt der Socket geöffnet. Der Ausgang BUSY wird auf TRUE gesetzt, während ACTIVATE = TRUE und der Socket noch nicht geöffnet ist. Bei einer fallenden Flanke des ACTIVATE-Eingangs wird der Socket geschlossen und der Ausgang ACTIVE auf FALSE gesetzt (siehe hierzu auch die nachfolgenden Hinweise). Sollte eine erfolgreich aufgebaute Verbindung geschlossen werden, versucht der Funktionsbaustein diese Verbindung erneut aufzubauen (sofern ACTIVATE = TRUE bleibt).

Client- oder Server-Funktionalität?

Der Eingang IS_SRV legt fest, ob der Funktionsbaustein eine Verbindung als TCP-Server oder TCP-Client aufbaut.

  • Mit IS_SRV = TRUE erzeugt der Funktionsbaustein einen "horchenden" (listening) Socket (Server-Socket). Der Socket kann an einen lokalen Ethernet-Adapter (Angabe der IP-Adresse am Eingang BIND_IP) und einen Port (Eingang BIND_PORT) gebunden werden. Unter dieser IP-Adresse und Portnummer wartet anschließend der Server auf Anfragen der Clients- Falls erforderlich kann die Anzahl der akzeptierten Clients über die Eingänge DEST_IP/DEST_PORTS limitiert werden. Bei geöffnetem (Server-) Socket sind nur 1:1 Verbindungen möglich. Das bedeutet, der Listening-Socket akzeptiert nur eine eingehende TLS-Verbindung.

    Wird ein TCP/TLS-Server implementiert, der mit mehreren TCP/TLS-Clients kommunizieren kann, so ist eine dedizierte TLS_SOCKET_2-Instanz pro erwartetem Client erforderlich.

  • Mit IS_SRV = FALSE wird ein Client-Socket erzeugt. In diesem Fall legen DEST_IP/DEST_PORT die IP-Adresse und den Port des Partner-Servers fest, mit dem kommuniziert werden soll.

WARNUNG
Unbeabsichtigter Betriebszustand des Geräts
Stellen Sie sicher, dass das Ändern der Ausgangsdaten nicht zu einem ungewollten oder gefährlichen Verhalten des Gesamtsystems führen kann.

TLS "on top" des TCP

Der Eingang START_TLS legt fest, ob für den Datenaustausch über die Funktionsbausteine TLS_SEND_2 und TLS_RECEIVE_2 eine reine TCP-Verbindung oder eine TLS-Verbindung verwendet wird. Im typischen Anwendungsfall für den FB TLS_SOCKET_2 liegt am Eingang START_TLS der Wert TRUE an, wenn der ACTIVATE-Eingang TRUE wird. In selteneren Fällen, wie zum Beispiel bei SMTP, wird an START_TLS eine steigende Flanke angelegt, während ACTIVATE auf TRUE gesetzt ist. Wenn nach erfolgreichem Verbindungsaufbau START_TLS = FALSE ist, verwenden die Funktionsbausteine TLS_SEND_2 und TLS_RECEIVE_2 eine TCP-Verbindung, um Daten zu senden bzw. zu empfangen.
Die Eingänge SEND_SECURE bzw. RECEIVE_SECURE der Funktionsbausteine müssen dem Wert an START_TLS entsprechen. Liegt nach erfolgreichem Verbindungsaufbau eine steigende Flanke an START_TLS an, wird das TLS-Protokoll initialisiert. Das bedeutet, das TLS-Protokoll wird aufsetzend auf dem TCP-Protokoll verwendet. Solange START_TLS = TRUE, erfolgt das Senden und Empfangen von Daten über eine TLS-gesicherte Verbindung.

Für die Initialisierung des TLS-Protokolls werden die Daten am CONNECT_INFO-Eingang verwendet, die zum Zeitpunkt der FB-Aktivierung anlagen. Die vordefinierte Struktur am Eingang CONNECT_INFO enthält unter anderem die im Vertrauensspeicher (TrustStore) und Identitätsspeicher (IdentityStore) der Geräte enthaltenen Zertifikate für die Authentifizierung. (Eine Beschreibung der Werte am CONNECT_INFO und wie Sie Zertifikate im WBM der Steuerung verwalten und verknüpfen finden Sie weiter unten im Thema.)
Hinweise
  • Die Funktionsbausteine für die TCP/TLS-Kommunikation werden asynchron verarbeitet. Das bedeutet, die Funktionsbausteine erteilen Befehle und warten auf deren Verarbeitung.
  • Das mit dem Funktionsbaustein TLS_SOCKET_2 erzeugte-Sockethandle ist nicht kompatibel mit dem Sockethandle, das mit TCP_SOCKET oder TLS_SOCKET erzeugt wird. Das TCP/TLS-Sockethandle kann nur mit den FBs TLS_SEND_2/TLS_RECEIVE_2 verwendet werden.
  • Die Anzahl der gerade geöffneten-Sockets wird in der Systemvariablen TLS_ACTIVE_SOCKETS gespeichert (enthalten in der Datenliste des Steuerungsknotens und des 'PLC'-Knotens der ANLAGE).
  • Bei einem Warm- oder Kaltstart oder einem Reset der Steuerung, schließt die Firmware alle Sockets, die mit der entsprechenden TLS_SOCKET_2-Instanz geöffnet wurden.
  • Stellen Sie bei Steuerungen mit integrierter Firewall sicher, dass die Firewall nicht die für die Kommunikation benötigten Ports blockiert. Andernfalls kann keine Verbindung hergestellt werden.
  • Alle verwendeten IP-Adressen sind IPv4-Adressen. IPv4-Adressen bestehen aus 4 Zahlen (Werte von 0 bis 255), die durch Punkte voneinander getrennt sind.
  • Funktionsbausteine müssen instanziiert werden.
    Der FB-Instanzname muss in der 'Variablen'-Tabelle der POE deklariert werden, in welcher der FB verwendet werden soll. Der Instanzname muss innerhalb der POE eindeutig sein.
  • Wenn der Socket geschlossen wird, beispielsweise vom Kommunikationspartner, während ACTIVATE TRUE bleibt, versucht der FB erneut einen Socket zu öffnen. Bei einem erfolgreichen Versuch führt der neue Socket zu einem neuen HANDLE-Wert.
  • Der FB TLS_SOCKET_2 selbst kann keinen Verbindungsabbruch (private close) erkennen. Ein Verbindungsabbruch kann nur beim Senden oder Empfangen von Daten erkannt werden. Aus diesem Grund muss der ERROR-Ausgang der FBs TLS_SEND_2 oder TLS_RECEIVE_2 geprüft werden. Wenn ERROR TRUE ist (oft nur für einen FB-Aufruf), liefert der STATUS-Ausgang zusätzliche Informationen. (Der STATUS-Wert 16#C228 zeigt einen Verbindungsabbruch an.)
    Ein Verbindungsabbruch (z.B. nicht angeschlossenes Ethernet-Kabel) wird mit Hilfe des TCP-Features "keep alive" erkannt. Die Erkennung kann mehrere Sekunden dauern (bei den meisten PLCnext-Steuerungen sind dies ca. 40 Sek.,abhängig von der Einstellung im Betriebssystem der Steuerung).
  • Gleichzeitig können bis zu 64 Sockets aktiviert werden (siehe auch Statuscode 0xC201).
ParameterEingänge

Hinweis
Die für den Aufbau der TLS-Kommunikation auf Basis (d.h."on top") der TCP-Kommunikation relevanten Parameter sind CONNECT_INFO und START_TLS. Die übrigen Eingänge spezifizieren TCP-Funktionalität.

ACTIVATE

IS_SRV

BIND_IP

BIND_PORT

DEST_IP

DEST_PORT

CONNECT_INFO

START_TLS

Ausgänge

HANDLE

ACTIVE

BUSY

ERROR

STATUS

USED_PORT
Zusätzliche InformationenVerwalten und Verknüpfen von Zertifikaten im TrustStore und IdentityStore