ADS-over-MQTT mit TLS und X.509 Zertifikaten

In diesem Abschnitt wird ein Beispiel zur Konfiguration von ADS-over-MQTT mit PSK- und X.509- Zertifikaten eingeführt. Die einzelnen Schritte zur Realisierung der Kommunikationsschnittstelle sind:

TwinCAT 3.1 Build 4022.0 oder höher ist auf System 1 als XAE-Version installiert und auf System 2 als XAR-Version.
1. Erzeugen Sie die Zertifikate zur sicheren Kommunikation per TLS. Hierfür verwenden Sie das Programm OpenSSL, das Sie unter https://www.openssl.org/source/ laden und anschließend installieren.
Hinweis Bei einem Windows-Betriebssystem muss der Pfad, in dem sich die Konfigurationsdatei von OpenSSL befindet, als Umgebungsvariable gesetzt sein. Führen Sie dies im Kommandozeilenprogramm eines x64-Systems mit folgendem Befehl durch: set OPENSSL_CONF=C:\OpenSSL-Win64\bin\openssl.cfg
Mit Abschluss der Installation führen Sie das Kommandozeilenprogramm von Windows aus. Es wird mit der Generierung des CA-Zertifikats (Certificate Authority) begonnen. Dabei wird die Eingabe eine Passphrase verlangt. Geben Sie diese ein, merken Sie sich und geben Sie weitere Informationen zum CA an. Der entsprechende Befehl zur Generierung des CA Zertifikats lautet wie folgt:
openssl req –new –x509 –days 60 –extensions v3_ca –keyout C:\TwinCAT\3.1\CustomConfig\Certificates\CA.key –out C:\TwinCAT\3.1\CustomConfig\Certificates\CA.crt
Im Kommandozeilenprogramm sollte das Ergebnis wie folgt aussehen:
ADS-over-MQTT mit TLS und X.509 Zertifikaten 1:
2. Erstellen Sie das Broker Zertifikat. Wichtig ist hierbei als CN (Common Name) den Hostnamen oder die IP-Adresse des Systems zu verwenden, auf dem der Mosquitto Message Broker betrieben werden soll. Zudem ist zu beachten, dass das System über die IP-Adresse bzw. den Hostnamen von den Clients erreichbar ist. Zur Generierung der Broker Zertifikate sind folgende Befehle im Kommandozeilenprogramm auszuführen:
Erstellen des Zertifikates:
openssl genrsa –out C:\TwinCAT\3.1\CustomConfig\Certificates\broker.key 2048

Erstellen des Certificate Signing Requests:
openssl req –out C:\TwinCAT\3.1\CustomConfig\Certificates\broker.csr –key C:\TwinCAT\3.1\CustomConfig\Certificates\broker.key –new

Signieren des CSR durch die zuvor erstellte CA, wofür das Passwort benötigt wird, welches bei der Erstellung der CA angegeben wurde:
openssl x509 –req –in C:\TwinCAT\3.1\CustomConfig\Certificates\broker.csr –CA C:\TwinCAT\3.1\CustomConfig\Certificates\CA.crt –CAkey C:\TwinCAT\3.1\CustomConfig\Certificates\CA.key –CAcreateserial –out C:\TwinCAT\3.1\CustomConfig\Certificates\broker.crt -days 60
Im Kommandozeilenprogramm sollte das Ergebnis wie folgt aussehen:
ADS-over-MQTT mit TLS und X.509 Zertifikaten 2:
3. Generieren Sie die beiden Client Zertifikate für das TwinCAT XAE und TwinCAT XAR. Die OpenSSL-Befehle dazu sind im Folgenden angegeben.
Generierung des XAE Zertifikats:
openssl genrsa –out C:\TwinCAT\3.1\CustomConfig\Certificates\TwinCAT_XAE.key 2048

Erstellen des CSR:
openssl req –out C:\TwinCAT\3.1\CustomConfig\Certificates\TwinCAT_XAE.csr –key C:\TwinCAT\3.1\CustomConfig\Certificates\TwinCAT_XAE.key –new

Signieren des CSR durch die zuvor erstellte CA, wofür das Passwort benötigt wird, welches bei der Erstellung der CA angegeben wurde:
openssl x509 –req –in C:\TwinCAT\3.1\CustomConfig\Certificates\TwinCAT_XAE.csr –CA C:\TwinCAT\3.1\CustomConfig\Certificates\CA.crt –CAkey C:\TwinCAT\3.1\CustomConfig\Certificates\CA.key –CAcreateserial –out C:\TwinCAT\3.1\CustomConfig\Certificates\TwinCAT_XAE.crt –days 60

Generierung des XAR Zertifikats:
openssl genrsa –out C:\TwinCAT\3.1\CustomConfig\Certificates\TwinCAT_XAR.key 2048

Erstellen des CSR:
openssl req –out C:\TwinCAT\3.1\CustomConfig\Certificates\TwinCAT_XAR.csr –key C:\TwinCAT\3.1\CustomConfig\Certificates\TwinCAT_XAR.key –new

Signieren des CSR durch die zuvor erstellte CA, wofür das Passwort benötigt wird, welches bei der Erstellung der CA angegeben wurde:
openssl x509 –req –in C:\TwinCAT\3.1\CustomConfig\Certificates\TwinCAT_XAR.csr –CA C:\TwinCAT\3.1\CustomConfig\Certificates\CA.crt –CAkey C:\TwinCAT\3.1\CustomConfig\Certificates\CA.key –CAcreateserial –out C:\TwinCAT\3.1\CustomConfig\Certificates\TwinCAT_XAR.crt –days 60
Im Kommandozeilenprogramm sollte das Ergebnis wie folgt aussehen:
TwinCAT XAE:
ADS-over-MQTT mit TLS und X.509 Zertifikaten 3:
TwinCAT XAR:
ADS-over-MQTT mit TLS und X.509 Zertifikaten 4:
4. Im Anschluss an die Generierung der Zertifikate installieren Sie den Mosquitto Broker. Laden Sie ihn von https://mosquitto.org/download/ und installieren Sie ihn auf dem entsprechenden System.
5. Nach der Installation des Mosquitto Brokers erstellen Sie für diesen die Konfigurationsdatei mosquitto_TLS.conf zur Verwendung von TLS mit Zertifikaten. Als Speicherort wählen Sie das Installationsverzeichnis von Mosquitto (Standardmäßig: C:\Program Files (x86)\mosquitto). Die Konfigurationsdatei soll folgende Einträge enthalten:
port 8883
allow_anonymous false
require_certificate true
use_identity_as_username true
cafile C:\TwinCAT\3.1\CustomConfig\Certificates\CA.crt
certfile C:\TwinCAT\3.1\CustomConfig\Certificates\broker.crt
keyfile C:\TwinCAT\3.1\CustomConfig\Certificates\broker.key
auth_plugin C:\TwinCAT\AdsApi\TcMqttPlugin\TcMqttPlugin.dll
auth_opt_xml_file C:\TwinCAT\AdsApi\TcMqttPlugin\ACL.xml
6. Nun starten Sie den Mosquitto Message Broker über das Kommandozeilenprogramm von Windows. Dazu wechseln Sie in das Installationsverzeichnis des Mosquittos und führen Sie den nachfolgend aufgeführten Befehl aus. Bei dem Befehl sorgt -v für eine Ausgabe der Nachrichten, die durch den Broker versendet oder auch abgelehnt werden. Diese Option ist gerade während Tests sinnvoll zu nutzen.
mosquitto –c mosquitto_TLS.conf –v
Anschließend sollte das Ergebnis wie folgt aussehen:
ADS-over-MQTT mit TLS und X.509 Zertifikaten 5:
7. Erstellen Sie für den Mosquitto als nächstes die ACL.xml, in der die Zugriffsrechte der Clients festgelegt werden. Legen Sie sie im Verzeichnis C:\TwinCAT\AdsApi\TcMqttPlugin\ ab. Nehmen Sie in der ACL.xml die folgenden Einträge vor:
<?xml version="1.0" encoding="ISO-8859-1"?>
<TcMqttAclConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="C:\TwinCAT\3.1\Config\Modules\TcMqttAclConfig.xsd">
<Ams>
    <Topic>VirtualAmsNetwork1</Topic>
    <User>
        <Name>TwinCAT_XAE</Name>
    </User>
    <User>
        <Name>TwinCAT_XAR</Name>
        <Access>TwinCAT_XAE</Access>
    </User>
</Ams>
</TcMqttAclConfig>
8. Konfigurieren Sie nun das TwinCAT XAE und TwinCAT XAR für ADS-over-MQTT. Dazu erstellen Sie auf beiden Systemen im Verzeichnis C:\TwinCAT\3.x\Target\ einen Ordner „Routes“ und erzeugen Sie in diesem eine Datei mit dem Namen „MyRoute.xml“ (der Dateiname ist dabei beliebig). Folgend ist der Inhalt der Datei vom TwinCAT XAE dargestellt. Passen Sie für das TwinCAT XAR im <Cert>- und <Key>-Feld die Pfade entsprechend an. Wichtig ist immer, dass im <Address>-Feld der gleiche Eintrag angegeben wird, wie für den CN des Mosquitto Broker Zertifikats.
<?xml version="1.0" encoding="ISO-8859-1"?>
<TcConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.beckhoff.com/schemas/2015/12/TcConfig">
<RemoteConnections>
    <Mqtt>
        <Address Port="8883">192.168.1.8</Address>
        <Topic>VirtualAmsNetwork1</Topic>
        <Tls>
            <Ca>C:\TwinCAT\3.1\CustomConfig\Certificates\CA.crt</Ca>
            <Cert>C:\TwinCAT\3.1\CustomConfig\Certificates\TwinCAT_XAE.crt</Cert>
            <Key>C:\TwinCAT\3.1\CustomConfig\Certificates\TwinCAT_XAE.key</Key>
        </Tls>
    </Mqtt>
</RemoteConnections>
</TcConfig>
9. Damit die gespeicherte Konfiguration von ADS-over-MQTT für die TwinCAT-Systeme wirksam wird, initialisieren Sie jeweils den TwinCAT Router neu. Dies geschieht, indem Sie vom RUN-Mode in den CONFIG-Mode schalten oder vom CONFIG-Mode erneut in den CONFIG-Mode.
Zuletzt prüfen Sie, ob vom XAE eine Verbindung zum XAR aufgebaut werden kann. Ist dies der Fall, sollten die Ausgaben des Mosquitto Message Brokers wie folgt aussehen:
ADS-over-MQTT mit TLS und X.509 Zertifikaten 6:
Damit ist ADS-over-MQTT mit TLS auf Basis von Zertifikaten für TwinCAT XAE und XAR erfolgreich eingerichtet.