SAP SNC Verschlüsselung

Ü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 gibt den Datei-Namen der anzulegenden PSE an.
Die Option -r importiert zusätzliche Zertifikate aus der Zertifikatskette. Es können bis zu 10 Zertifikate über mehrfache Verwendung der -r Option angegeben werden.

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 gibt den Datei-Namen der anzulegenden PSE an.
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 gibt den Datei-Namen der anzulegenden PSE an.
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 gibt den Datei-Namen der anzulegenden PSE an.
Die Option -o gibt den Datei-Namen des exportierten Zertifikats an.

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 gibt den Datei-Namen der anzulegenden PSE an.
Die Option -a gibt den Datei-Namen des zu importierenden Zertifikats an.

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

View Me   Edit Me