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.
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:
- 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:
- 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:
TwinCAT XAR: - 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:
- 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:
- Damit ist ADS-over-MQTT mit TLS auf Basis von Zertifikaten für TwinCAT XAE und XAR erfolgreich eingerichtet.