Konzept
Einführung
Die Konzepte, die jede Server-Entwicklung mit dem OPC UA .NET SDK voraussetzt: Server starten und stoppen, Adresse, Endpunkte und Sicherheit.
Konzept
Einführung
Der Server
Starten
Das passiert beim Aufruf der Methode Start:
- Der Server prüft, ob eine Adresse festgelegt ist (Eigenschaft
OpcServer.Address). Ohne Angabe verwendet der Server die Adresseopc.tcp://localhost:4840. Wenn alle Adressen wieder abgemeldet wurden, löstStarteineInvalidOperationExceptionaus. - Der Server prüft seine Lizenz und ändert seinen Status (Eigenschaft
OpcServer.State) auf den WertStarting. Wenn sich der Server nicht im StatusCreatedoderStoppedbefindet, bleibt der Aufruf ohne Wirkung. - Der Server prüft seine Konfiguration auf Gültigkeit und Schlüssigkeit.
- Anschließend versucht der Server, für jede Endpunktbeschreibung einen Host zu erstellen.
- Danach startet der Server alle Manager, zum Beispiel die Node-Manager und den
SessionManager. - Schließlich startet der Server jeden erstellten Host. Die Hosts sind für die endpunktspezifische Kommunikation mit den Clients zuständig.
- Der Server ändert seinen Status (Eigenschaft
OpcServer.State) auf den WertStarted.
Stoppen
Das passiert beim Aufruf der Methode Stop:
- Der Server ändert seinen Status (Eigenschaft
OpcServer.State) auf den WertStopping. - Der Server beendet alle Manager, zum Beispiel die Node-Manager und den
SessionManager. - Der Server gibt alle erworbenen Ressourcen wieder frei.
- Der Server beendet die Hosts der Endpunktbeschreibungen.
- Der Server ändert seinen Status (Eigenschaft
OpcServer.State) auf den WertStopped.
Ein Server lässt sich auch aus dem Status Suspended heraus beenden.
Anhalten und fortsetzen
Wenn der Server für eine Wartung vorübergehend als nicht verfügbar gelten soll, ohne dass Sie ihn beenden, rufen Sie die Methode Suspend auf. Der Server wechselt dann über den Status Suspending in den Status Suspended und meldet seinen Clients über den Serverstatus den Zustand Suspended. Seine Endpunkte bleiben dabei erreichbar. Über die Eigenschaft OpcServer.EstimatedReturnTime kann der Server den Clients zuvor mitteilen, wann er voraussichtlich wieder verfügbar ist. Die Eigenschaft lässt sich nur im Status Started setzen. Die Methode Resume setzt den Server über Starting wieder in den Status Started. Beide Methoden wirken nur aus dem jeweils passenden Status heraus: Suspend aus Started, Resume aus Suspended.
// Announce the expected end of the maintenance to the clients.
server.EstimatedReturnTime = DateTime.UtcNow.AddMinutes(10);
server.Suspend();
...
server.Resume();'Announce the expected end of the maintenance to the clients.
server.EstimatedReturnTime = DateTime.UtcNow.AddMinutes(10)
server.Suspend()
...
server.Resume()Adresse und Parameter
Damit der Server den Clients Zugang zu seinen OPC-UA-Services geben kann, legen Sie die richtigen Parameter fest. Der Server benötigt immer die Adresse, unter der er erreichbar ist (Eigenschaft OpcServer.Address). Die Adresse ist ein URI (= Uniform Resource Identifier) und liefert allen Clients die wesentlichen Informationen über den Server. Die Serveradresse opc.tcp://192.168.0.80:4840 enthält zum Beispiel das Schema opc.tcp. Das Schema legt fest, über welches Protokoll die Daten wie ausgetauscht werden. Möglich sind opc.tcp und https. Für OPC UA Server im lokalen Netzwerk empfehlen wir opc.tcp. Für Server außerhalb des lokalen Netzwerks kann sich https anbieten. Außerdem legt die Adresse fest, dass der Server auf dem Rechner mit der IP-Adresse 192.168.0.80 läuft und auf Anfragen über den Port 4840 wartet. Das ist der Standardport für OPC UA, benutzerdefinierte Portnummern sind ebenfalls möglich. Anstelle der statischen IP-Adresse können Sie auch den DNS-Namen des Rechners verwenden, zum Beispiel localhost anstelle von 127.0.0.1.
Wenn der Server keinen Endpunkt (engl. Endpoint) bereitstellen soll, dessen Policy den Sicherheitsmodus None hat, konfigurieren Sie mindestens eine Endpoint-Policy (Eigenschaft OpcServer.Security.EndpointPolicies). Möglich sind zudem die Sicherheitsmodi Sign und SignAndEncrypt. Wenn der Server dagegen einen Endpunkt mit der Policy None bereitstellt, kann ein Client diesen automatisch für eine einfache und schnelle Verbindung auswählen. Jeder Endpoint-Policy ordnet das SDK einen Policy-Level zu, also eine Zahl. Das SDK berechnet ihn aus dem Sicherheitsmodus und dem Sicherheitsalgorithmus und teilt ihn den Clients mit (Eigenschaft OpcSecurityPolicy.Level). Zuweisen lässt sich der Level nicht. Die OPC Foundation sieht vor: Je höher der Level der Policy eines Endpunkts, desto besser ist der Endpunkt. Das ist lediglich eine Richtlinie, die niemand prüft oder durchsetzt.
Wenn der Server eine Zugriffssteuerung verwenden soll, zum Beispiel über eine ACL (= Access Control List, also eine Zugriffskontrollliste), legen Sie die gültigen Identitäten seiner Benutzer fest. Das funktioniert auch im laufenden Betrieb. Die Identitäten der Benutzer lassen sich über ein Benutzername-Passwort-Paar (Klasse OpcServerIdentity) oder über ein Zertifikat (Klasse OpcCertificateIdentity) festlegen. Übergeben Sie die Identitäten dem Server über die Eigenschaften OpcServer.Security.UserNameAcl und OpcServer.Security.CertificateAcl. Damit der Server diese Zugriffskontrolllisten berücksichtigt, aktivieren Sie sie über ihre Eigenschaft IsEnabled. Die Zugriffskontrollliste für anonyme Benutzer (Eigenschaft OpcServer.Security.AnonymousAcl) ist nur so lange aktiv, wie keine andere Zugriffskontrollliste aktiv ist, es sei denn, ihre Eigenschaft IsEnabled ist ausdrücklich gesetzt. Wenn Sie also zum Beispiel die UserNameAcl aktivieren, schalten Sie damit den anonymen Zugriff ab. Weitere Möglichkeiten wie Rollen und eigene Zugriffskontrolllisten beschreibt die Seite Server absichern.
Endpunkte
Die Endpunkte ergeben sich aus dem Kreuzprodukt der Basis-Adressen des Servers und der Sicherheitsstrategien, die der Server unterstützt. Jede Basis-Adresse ergibt sich aus einem unterstützten Paar aus Schema und Port. Für den Datenaustausch lassen sich mehrere Schemen (möglich sind opc.tcp und https) auf unterschiedlichen Ports festlegen. Die so verknüpften Strategien (engl. Policies) legen das Vorgehen beim Datenaustausch fest. Jede Policy besteht aus dem Policy-Level, dem Sicherheitsmodus (engl. Security Mode) und dem Sicherheitsalgorithmus (engl. Security Algorithm) und legt damit die Art des sicheren Datenaustauschs fest.
Angenommen, der Server unterstützt zwei Sicherheitsstrategien:
- Security Policy A: Level 0, Sicherheitsmodus
None, SicherheitsalgorithmusNone - Security Policy B: Level 1, Sicherheitsmodus
Sign, SicherheitsalgorithmusBasic256Sha256
Dazu kommen drei Basis-Adressen für verschiedene Schemen:
- Basis-Adresse A:
https://mydomain.com/ - Basis-Adresse B:
opc.tcp://192.168.0.123:4840/ - Basis-Adresse C:
opc.tcp://192.168.0.123:12345/
Das Kreuzprodukt ergibt daraus die folgenden Endpunktbeschreibungen:
- Endpunkt 1: Adresse
https://mydomain.com/, Level 0, SicherheitsmodusNone, SicherheitsalgorithmusNone - Endpunkt 2: Adresse
https://mydomain.com/, Level 1, SicherheitsmodusSign, SicherheitsalgorithmusBasic256Sha256 - Endpunkt 3: Adresse
opc.tcp://192.168.0.123:4840/, Level 0, SicherheitsmodusNone, SicherheitsalgorithmusNone - Endpunkt 4: Adresse
opc.tcp://192.168.0.123:4840/, Level 1, SicherheitsmodusSign, SicherheitsalgorithmusBasic256Sha256 - Endpunkt 5: Adresse
opc.tcp://192.168.0.123:12345/, Level 0, SicherheitsmodusNone, SicherheitsalgorithmusNone - Endpunkt 6: Adresse
opc.tcp://192.168.0.123:12345/, Level 1, SicherheitsmodusSign, SicherheitsalgorithmusBasic256Sha256
Den Adressteil des Endpunkts legt immer der Server fest, über den Konstruktor oder über die Eigenschaft Address. Solange keine Policy konfiguriert ist, definiert der Server einen Endpunkt mit dem Sicherheitsmodus None. Wenn der Server stattdessen oder zusätzlich andere Policies verwenden soll, konfigurieren Sie sie über die Eigenschaft OpcServer.Security.EndpointPolicies.
Zertifikate und Sicherheit
Das SDK soll den Einstieg in OPC UA so einfach wie möglich machen. Deshalb ist die Verbindung zwischen Client und Server ohne weitere Konfiguration des Servers nicht vollständig abgesichert. Sobald Sie den finalen Spike implementiert und getestet haben, sollten Sie sich mit der Sicherheit befassen:
- Wie Zertifikate Client und Server ausweisen, wo sie liegen und wie die Anwendungen sie prüfen, beschreibt die Seite Zertifikate verstehen.
- Wie sich Benutzer anmelden und welche Rechte sie erhalten, beschreibt die Seite Benutzer und Rollen.
- Alle Einstellungen für den Produktivbetrieb und eine Checkliste enthält der Abschnitt Härtung für den Produktivbetrieb.

