Skip to main content
Skip table of contents

cryptstore://-URL-Protokoll

Mit dem cryptstore://-URL-Protokoll können Sie zur Laufzeit eines Prozesses in XSL-Mappings auf verschlüsselte Repository-Dokumente zugreifen und diese in einem Schritt entschlüsseln.

Das Dokument kann im XSL-Mapping über die document()-Funktion eingebunden werden, die den direkten Zugriff auf das dekodierte Dokument ermöglicht.

Verwenden einer Cryptstore-Implementierung

Der X4 Server ermöglicht über das cryptstore://-URL-Protokoll die Ver- und Entschlüsselung von Repository-Elementen. Dabei wird der Bytestrom durch eine kundenspezifische Java-Klasse geleitet, um gelesen, entschlüsselt und weitergegeben zu werden. Diese kundenspezifische Klasse muss von InputStream ableiten und einen Konstruktor besitzen, der einen InputStream als einzigen Parameter entgegennimmt.

Empfohlen wird, die Klasse von javax.crypto.CipherInputStream abzuleiten und im Konstruktor das Objekt zu parametrieren. Die fertige Klasse muss als Java-Archiv (.jar) im Ordner <WildFly>\modules\system\layers\base\de\softproject\x4\client\main angelegt werden.  Zusätzlich muss in der Datei module.xml innerhalb von <WildFly>\modules\system\layers\base\de\softproject\x4\client\main im Element <resources> ein Kindelement <resource-root path="<Name des Java-Archivs>.jar"/> hinzugefügt werden. Darüber hinaus muss der Klassenname in der Konfigurationsdatei <X4>/X4config.xml direkt hinter dem Element <xstore/> in einem Element <cryptstoreStreamHandlerClass/> als vollqualifizierter Klassenname angegeben werden.

Aufbau der URL

Die URL muss nach folgendem Muster aufgebaut sein:

HTML/XML
cryptstore://Repository-Pfad/VerschlüsselteDatei

Ein XSL-Mapping, das dieses URL-Protokoll verwendet, kann nicht in der Transformations-Vorschau des Mapping Editors ausgeführt werden.

Beispiel

Im folgenden Beispiel wird ein verschlüsseltes XML-Dokument im Repository innerhalb eines XSL-Mappings über die document()-Funktion aufgerufen und in einer XSL-Variable externalFile zwischengespeichert. Die Knoten des Variableninhalts sind per XPath beliebig selektierbar.

HTML/XML
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output encoding="UTF-8" method="xml" version="1.0"/>
   <xsl:template match="/">
      <result>
         <xsl:variable select="document('cryptstore://Project/Folder/Data.xml')" name="externalFile"/>
         <xsl:value-of select="$externalFile/child::ElemName"/>
      </result>
   </xsl:template>
</xsl:stylesheet>

Beispiel für eine mögliche Implementierung

JAVA
import java.io.InputStream;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;

import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;

public class TestCrypt extends CipherInputStream {

    public TestCrypt(InputStream stream) throws InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException {
        super(stream,createCipher());
    }

    private static Cipher createCipher() throws InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException {
        // Ciphers must NOT be cached!!
        Cipher cipher = Cipher.getInstance( "AES" );
        Key key = new SecretKeySpec( readKeyBytes(), "AES" );
        cipher.init( Cipher.DECRYPT_MODE, key );

        return cipher;
    }

    private static byte[] readKeyBytes() {
        // read your Key from where ever it is needed
        // the keyData may be cached
        byte[] keyData;
        return keyData;
    }
}
JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.