Übersicht
Verbindungen zwischen dem SAP und der B2B über den SAP JavaConnector (SAPJCo) können mittels Secure Network Communication (SNC) gesichert werden.
Für die SNC-Verschluesselung wird die SAP Cryptographic Library verwendet.
Voraussetzungen
Voraussetzung ist, das die SAP Cryptographic Library zur Verfügung steht und das SNC auf SAP-Seite aktiviert ist.
Personal Security Environment einrichten
Für die SNC-Verschlüsselung wird eine Personal Security Environment (PSE) benötigt. Dabei handelt es sich um einen Keystore bzw. Truststore. Darin enthalten sind
- die eigenen Public-Key-Daten, inklusive des eigenen privaten Schlüssels
- das eigene Public-Key-Zertifikat
- alle Public-Key-Zertifikate der Kommunikationspartner, denen vertraut wird
In der SAPCryptoLib ist das Tool sapgenpse enthalten. Dieses wird verwendet um die PSE einzurichten.
Das Tool arbeitet mit der Umgebungsvariable SECUDIR. Diese gibt das Verzeichnis an, in dem sich die PSE befindet bzw. in dem die PSE angelegt werden soll. Ist die Umgebungsvariable nicht gesetzt, so wird als Default das Verzeichnis C:\Users<user>\AppData\Local\sec verwendet. Existiert das Verzeichnis nicht, so kommt es zu Fehlern.
Die SNC-Konfiguration ist auch im SAP Help Portal beschrieben.
PSE anlegen
Es gibt zwei Möglichkeiten, die PSE zu erzeugen
- mit einem bestehenden Zertifikat
- mit gleichzeitiger Erzeugung eines selbst-signierten Zertifikats
PSE mit bestehendem Zertifikat anlegen
Für die Erzeugung einer PSE mit einem bestehenden Zertifikat wird der Befehl import_p12 verwendet.
Dabei ist es unter Umständen notwendig über die -r Option auch alle Zertifikate aus der Zertifikatskette zu importieren.
sapgenpse import_p12 [options] -p <pse file> <filename>.p12
Die Option -p
Die Option -r
Der vollständige Befehl kann beispielsweise folgendermaßen aussehen:
sapgenpse import_p12 -r "Beispiel CA 2019.cer" -r "Beispiel Root CA Corporate 2019.cer" -p b2b-dev.pse b2b-dev.PFX
Bei Ausführung des Befehls wird nach der PIN für die PSE gefragt. Da die PSE in diesem Schritt erzeugt wird, kann die PIN beliebig gewählt werden. sapgenpse legt dann eine PSE im Verzeichnis SECUDIR an.
PSE anlegen und selbst-signiertes Zertifikat erzeugen
Für die Erzeugung einer PSE und Erzeugung eines privaten Schlüssels sowie öffentlichen Zertifikats wird der Befehl get_pse verwendet.
Dabei ist es notwendig den Distingushed Name anzugeben.
sapgenpse get_pse -p <pse file> [other-options] [Distinguished name]
Die Option -p
Der Distinguished Name besteht aus folgenden Elementen:
- CN = <Common_Name>
- OU = <Organisationseinheit>
- O = <Organisation>
- C = <Land>
Der vollständige Befehl kann beispielsweise folgendermaßen aussehen:
sapgenpse get_pse -p b2b-dev.pse "CN=B2B_Development, O=NLI, C=DE"
Bei Ausführung des Befehls wird nach der PIN für die PSE gefragt. Da die PSE in diesem Schritt erzeugt wird, kann die PIN beliebig gewählt werden. sapgenpse legt dann eine PSE im Verzeichnis SECUDIR an.
Bei Bedarf kann ein SigningRequest für das zunächst selbst-signierte Zertifikat erzeugt werden. Dies kann auch nachträglich passieren. Das Zertifikat kann dann von einer Zertifizierungsstelle signiert werden und anschließend in der PSE aktualisiert werden.
Zugriffsberechtigung für den Tomcat anlegen
Der Tomcat muss zur Laufzeit Credentials haben, um auf die PSE zugreifen zu können. Um die PSE zu öffnen und Credentials anzulegen wird der Befehl seclogin verwendet.
sapgenpse seclogin -p <pse file> -O [<NT_Domain>\]<user_ID>
Die Option -p
Die Option -O gibt den Usernamen (evtl. inkl. Domain) an, für den SSO-Credentials angelegt werden sollen.
Der vollständige Befehl kann beispielsweise folgendermaßen aussehen:
sapgenpse seclogin -p b2b-dev.pse -O NLI\b2b_user_tomcat
Bei Ausführung des Befehls wird nach der PIN für die PSE gefragt. sapgenpse legt dann eine Credentials-Datei (cred_v2) im Verzeichnis SECUDIR an. Existiert die Datei bereits, so wird diese aktualisiert.
Public-Key-Zertifikate austauschen
Für die SNC-Kommunikation müssen sich die B2B und das SAP gegenseitig identifizieren können. Die Identifizierung erfolgt anhand von Public-Key-Zertifikaten, die in der PSE abgelegt werden. Damit die Identifizierung möglich ist, muss in der PSE der B2B das Public-Key-Zertifikat des SAP abgelegt werden und umgekehrt.
Wird SNC-Verschlüsselung für die Kommunikation mit mehreren SAP-Systemen verwendet, so müssen die Public-Key-Zertifikate für alle diese SAP-Systeme importiert werden.
Eigenes Zertifikat exportieren
Wurde die PSE mit einem vorhanden Zertifikat angelegt, so ist der erneute Export nicht notwendig und es kann direkt das Public-Key-Zertifikat an die SAP-Betreuer weitergegeben werden.
Wurde mit dem sapgenpse ein neues Zertifikat erzeugt, so kann das Public-Key-Zertifikat mit dem Befehl export_own_cert exportiert werden.
sapgenpse export_own_cert -o <output file> -p <pse file>
Die Option -p
Die Option -o
Der vollständige Befehl kann beispielsweise folgendermaßen aussehen:
sapgenpse export_own_cert -o snc_b2b_dev.cer -p b2b-dev.pse
Bei Ausführung des Befehls wird nach der PIN für die PSE gefragt. sapgenpse legt dann das Public-Key-Zertifikat unter dem angegebenen Datei-Namen ab.
Zertifikat vom SAP importieren
Um das Zertifikat vom SAP zu importieren wird der Befehl maintain_pk verwendet.
sapgenpse maintain_pk -a <cert file> -p <pse file>
Die Option -p
Die Option -a
Der vollständige Befehl kann beispielsweise folgendermaßen aussehen:
sapgenpse maintain_pk -a SNCSAP.cer -p b2b-dev.pse
Bei Ausführung des Befehls wird nach der PIN für die PSE gefragt. sapgenpse importiert dann das Public-Key-Zertifikat in die PSE.
Umgebungsvariable SECUDIR setzen
Für die SNC-Verschlüsselung muss der Tomcat wissen, wo er die zu verwendende PSE und die Credentials findet. Dafür muss die Umgebungsvariable SECUDIR auf das Verzeichnis gesetzt werden, in dem die PSE sowie die Credentials (cred_v2) abgelegt sind.
Umgebungsvariable SECUDIR für Tomcat als Windows-Service setzen
Es gibt verschiedene Möglichkeiten, die Umgebungsvariable SECUDIR an den Tomcat zu übergeben.
Windows-Systemvariable
SECUDIR kann als Systemvariable oder Benutzervariable in den Windows-Systemeigenschaften → Umgebungsvariablen hinterlegt werden.
Dies ist unvorteilhaft, wenn mehrere B2B-Installationen auf einem Server vorhanden sind, die unterschiedliche PSEs verwenden sollen.
Service-Parameter am Tomcat-Windows-Service
Es besteht auch die Möglichkeit die Umgebungsvariable als Parameter am Windows-Service zu setzen. Dafür wird die Service-Anwendung TomcatX im tomcat\bin-Verzeichnis verwendet (z.B. Tomcat8.exe) mit dem Kommando-Zeilen-Befehl UpdateService.
Bei mehreren Tomcat-Knoten muss dies für jeden Knoten gemacht werden.
Tomcat8 //US/<Tomcat-Service-Name> ++Environment SECUDIR=<folder>
Der Befehl muss natürlich an die Konfiguration des Tomcat-Services angepasst werden. Dies kann beispielsweise folgendermaßen aussehen:
B2B_Dev_Tomcat1 //US/B2B_Dev_Tomcat1 ++Environment SECUDIR=D:\SNC
Verbindungsparameter konfigurieren
Die SNC-Parameter sind auch im SAP Help Portal beschrieben.
Es gibt folgende Parameter:
Parameter | Beschreibung | Werte |
---|---|---|
SNC-Modus | Kennzeichen zum Aktivieren von SNC | 1/0 |
SNC-Library-Pfad | Pfad- und Dateiname der SNC-Library | Optional. Standard ist die systemdefinierte Library, wie sie in der Umgebungsvariable SNC_LIB definiert ist. |
Sicherheitsgrad | Sicherheitsgrad, der für die Verbindung verwendet werden soll | Optional. Standard ist 3 (Schutz der Vertraulichkeit) |
Eigener SNC-Name | Der SNC-Name hat die Form p:<Distinguished_name> | Der SNC-Name kann aus dem Distinguished_name im Public-Key_zertifikat, das beim Anlegen der PSE verwendet wurde, abgelesen werden |
SNC-Name des Kommunikationspartners | Der SNC-Name hat die Form p:<Distinguished_name> | Der SNC-Name kann aus dem Distinguished_name im Public-Key_zertifikat vom SAP abgelesen werden |
Client-seitige Verbindungsparameter konfigurieren
Die Konfiguration für Client-seitige SAPJCo-RFC-Verbindungen ist in der Extension JCO_DESTINATION_DATA_PROVIDER hinterlegt. An dieser Stelle sind nur die Parameter genannt, die für die SNC-Konfiguration relevant sind.
Die Konfiguration kann beispielsweise folgendermaßen aussehen:
<Client_Name>=jco.client.snc_mode=1
<Client_Name>=jco.client.snc_myname=p:CN=B2B_Development, O=NLI, C=DE
<Client_Name>=jco.client.snc_lib=D:/SNC/sapcrypto/sapcrypto.dll
<Client_Name>=jco.client.snc_partnername=p:CN=SNCSAP, O=TEST IT, C=DE
<Client_Name>=jco.client.snc_qop=3
Server-seitige Verbindungsparameter konfigurieren
Arbeitet die B2B als SAPJCo-RFC-Server, so ist die Konfiguration dafür in der Extension JCO_SERVER_DATA_PROVIDER hinterlegt. An dieser Stelle sind nur die Parameter genannt, die für die SNC-Konfiguration relevant sind.
Die Konfiguration kann beispielsweise folgendermaßen aussehen:
<Server_Name>=jco.server.snc_mode=1
<Server_Name>=jco.server.snc_myname=p:CN=B2B_Development, O=NLI, C=DE
<Server_Name>=jco.server.snc_lib=D:/SNC/sapcrypto/sapcrypto.dll
<Server_Name>=jco.server.snc_qop=3