Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Kennt jemand eine lauffähiges Beispiel für die OSCI Bibliothek?

154 views
Skip to first unread message

Friedrich Dominicus

unread,
Sep 18, 2009, 8:34:38 AM9/18/09
to
Es geht um die Library auf der Seite:
http://www1.osci.de/sixcms/detail.php?gsid=bremen02.c.1160.de

Gibt es hier jemanden der dies Beispiele dafür zum Laufen brachte?

Bis dann
Friedrich

--
Please remove just-for-news- to reply via e-mail.

Tor-Einar Jarnbjo

unread,
Sep 18, 2009, 7:30:50 PM9/18/09
to
Friedrich Dominicus schrieb:

> Es geht um die Library auf der Seite:
> http://www1.osci.de/sixcms/detail.php?gsid=bremen02.c.1160.de
>
> Gibt es hier jemanden der dies Beispiele daf�r zum Laufen brachte?

Ja, wir haben es erfolgreich einsetzen k�nnen, aber ich kann leider
keinen Code weitergeben. Welche Probleme hast du damit? Es ist zwar ein
paar Jahre her, aber ich kann mich nicht daran erinnern, dass wir
besondere Probleme damit hatten.

Gru�, Tor

Friedrich Dominicus

unread,
Sep 19, 2009, 5:12:35 AM9/19/09
to
Tor-Einar Jarnbjo <ne...@jarnbjo.de> writes:

> Friedrich Dominicus schrieb:
>> Es geht um die Library auf der Seite:
>> http://www1.osci.de/sixcms/detail.php?gsid=bremen02.c.1160.de

>> Gibt es hier jemanden der dies Beispiele dafür zum Laufen brachte?
>
> Ja, wir haben es erfolgreich einsetzen können, aber ich kann leider


> keinen Code weitergeben. Welche Probleme hast du damit? Es ist zwar
> ein paar Jahre her, aber ich kann mich nicht daran erinnern, dass wir
> besondere Probleme damit hatten.

Konkretes Problem mit dem Beispiel (OneWayRecipient
PKSCS12Signer

private void init(InputStream in, String pin)
throws KeyStoreException,
CertificateException,
NoSuchAlgorithmException,
IOException
{
this.pin = pin.toCharArray();

if (DialogHandler.getSecurityProvider() == null)
keyStore = java.security.KeyStore.getInstance("PKCS12");
else
{
keyStore = java.security.KeyStore.getInstance("PKCS12", DialogHandler.getSecurityProvider());
}

keyStore.load(in, this.pin);

String al = null;
// Keine Schlüssel den
// von der OSCI vertriebenen Testzertifikaten von
// http://www1.osci.de/sixcms/detail.php?gsid=bremen02.c.1210.de


Enumeration e = keyStore.aliases();

while (e.hasMoreElements())

if (keyStore.isKeyEntry(al = (String) e.nextElement()))
break;

if (al == null)
throw new NullPointerException("No private key found in keystore.");

this.alias = al;
cert = (X509Certificate) keyStore.getCertificate(alias);
}


Wie gesagt es reicht mir wenn die Beispiele die mitgeliefert werden
liefen. Da sollte es ja keine "Geheimnisse" geben. Die Quellen kann
man von
http://www1.osci.de/sixcms/detail.php?gsid=bremen02.c.1403.de

runterladen. Ich möchte nur die Beispiel verstehen. Und aber wenn
jemand sich damit auskennt eine saubere Verbindung zu ZKS-Abfall
aufbauen. Also wenn sich da jeman auskennt, bitte melden.

Danke

Tor-Einar Jarnbjo

unread,
Sep 19, 2009, 4:19:55 PM9/19/09
to
Friedrich Dominicus schrieb:

> Konkretes Problem mit dem Beispiel (OneWayRecipient
> PKSCS12Signer

Und das konkrete Problem war welches? Du hast ein Bisschen Code
geschrieben, um aus einem Java-Keystore ein Zertifikat zu holen, aber
doch nirgendwo das OSCI-Library verwendet ... ?

Es k�nnte zwar aussehen, als ob du in dem Code versuchst ein Zertifikat
aus dem Keystore mit dem Alias eines Schl�ssels zu holen (was wohl
wahrscheinlich nicht zielf�hrend ist), aber wenn du nicht erz�hlen
willst was das Problem ist, ist es nicht so einfach dir zu helfen.

Gru�, Tor

Friedrich Dominicus

unread,
Sep 21, 2009, 3:16:09 AM9/21/09
to
Tor-Einar Jarnbjo <ne...@jarnbjo.de> writes:

> Friedrich Dominicus schrieb:
>
>> Konkretes Problem mit dem Beispiel (OneWayRecipient
>> PKSCS12Signer
>
> Und das konkrete Problem war welches? Du hast ein Bisschen Code
> geschrieben, um aus einem Java-Keystore ein Zertifikat zu holen, aber
> doch nirgendwo das OSCI-Library verwendet ... ?
>

> Es könnte zwar aussehen, als ob du in dem Code versuchst ein
> Zertifikat aus dem Keystore mit dem Alias eines Schlüssels zu holen
> (was wohl wahrscheinlich nicht zielführend ist), aber wenn du nicht
> erzählen willst was das Problem ist, ist es nicht so einfach dir zu
> helfen.
Hat mich einen Tag wegen "Schusseligkeit" gekostet. Wahrscheinlich
auch eine Warnung überlesen. Statt eine FileInputStreams habe ich ein
String übergeben. Nun habe ich das geändert und bin
weitergekommen. Ich fand halt überhaupt keinen Schlüssel im Keystore
und das habe ich nicht auf die Reihe bekommen. Naja dafür habe ich
noch simpleren Code geschrieben bis mir mein "Fehler" auffiel. Jetzt
muß ich mal schauen ob und wie ich was an die OSCI-Teststelle schicken
kann.

Danke aber für Deine Antworten.

Grüsse aus Heidelse

Friedrich Dominicus

unread,
Sep 21, 2009, 6:39:31 AM9/21/09
to
Tor-Einar Jarnbjo <ne...@jarnbjo.de> writes:

> Friedrich Dominicus schrieb:
>
>> Konkretes Problem mit dem Beispiel (OneWayRecipient
>> PKSCS12Signer

Ok hier nun der modifizierte Code der ursprünglich ist im der Datei
OneWayMessage_ActiveRecipient. Ich habe nur alles mögliche
rausgeworfen.
@author frido

import de.osci.helper.Tools;
import de.osci.osci12.OSCIException;
import de.osci.osci12.common.Constants;
import de.osci.osci12.common.DialogHandler;
import de.osci.osci12.extinterfaces.crypto.Decrypter;
import de.osci.osci12.extinterfaces.crypto.Signer;
import de.osci.osci12.messageparts.Attachment;
import de.osci.osci12.messageparts.Content;
import de.osci.osci12.messageparts.ContentContainer;
import de.osci.osci12.messageparts.EncryptedDataOSCI;
import de.osci.osci12.messagetypes.ExitDialog;
import de.osci.osci12.messagetypes.FetchDelivery;
import de.osci.osci12.messagetypes.FetchProcessCard;
import de.osci.osci12.messagetypes.GetMessageId;
import de.osci.osci12.messagetypes.InitDialog;
import de.osci.osci12.messagetypes.OSCIMessage;
import de.osci.osci12.messagetypes.ResponseToExitDialog;
import de.osci.osci12.messagetypes.ResponseToFetchDelivery;
import de.osci.osci12.messagetypes.ResponseToFetchProcessCard;
import de.osci.osci12.messagetypes.ResponseToGetMessageId;
import de.osci.osci12.messagetypes.ResponseToInitDialog;
import de.osci.osci12.messagetypes.ResponseToStoreDelivery;
import de.osci.osci12.messagetypes.StoreDelivery;
import de.osci.osci12.roles.Addressee;
import de.osci.osci12.roles.Intermed;
import de.osci.osci12.roles.Originator;
import de.osci.osci12.roles.Reader;
import de.osci.osci12.roles.Role;

import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import java.net.URISyntaxException;

import java.security.GeneralSecurityException;
import java.security.cert.CertificateException;

import java.security.cert.X509Certificate;

/**
* This is a demo application for an asynchronous communication scenario
* according to the OSCI 1.2-trensport specification. The main method needs
* the intermediary's URL as parameter.
* @version 0.9
*/
public class OSCITest

{
Intermed intermed;

private String pathToCertificates =
"path_to_Testzeritfikaten_vonOSI"; // OSCI-Test";
private String osciManagerCypher = pathToCertificates + "/test_osci-manager_cypher.cer";
private String aliceSignature = pathToCertificates + "/test_alice_signature.p12";
private String aliceCypher = pathToCertificates + "/test_alice_cypher.p12";
private String bobCypher = pathToCertificates + "/test_bob_cypher.cer";
private Reader reader;
private Addressee addressee;
private X509Certificate receiver;
private DialogHandler clientDialog;

// receiver = Tools.createCertificate(new FileInputStream(certToUse));


/*
* Constructor for demo application
* @param intermedURL Intermediary-URL
* @throws CertificateException if the certificate cannot be parsed
* @throws URISyntaxException URL syntax errors
*/
public OSCITest(String intermedURL)
throws CertificateException,
URISyntaxException
{
// First we need the Intermediarys Cipher-Certificate
X509Certificate intermedCipherCert;
try {
intermedCipherCert = Tools.createCertificate(new FileInputStream(osciManagerCypher));
intermed = new Intermed(null, intermedCipherCert, new java.net.URI(intermedURL));
} catch (Exception e) {
e.printStackTrace();
}
// Create the Intermed-role object
// The signature certificate (for signature checks) is always
// enclosed in signed responses, so this parameter can be null

}

/**
* Sends an OSCI-StoreDelivery message to the intermediary.
* @return the OSCI-message response object
* @throws GeneralSecurityException in case of cryptographic / security errors
* @throws IOException write / read errors
* @throws OSCIException any errors concerning the OSCI-message processing
*/
public ResponseToStoreDelivery sendStoreDelivery()
throws GeneralSecurityException, IOException, OSCIException {
// Create the Originator-object. Since we have the private key(s), we
// use this
// Constructor. We need a Decrypter-object for decryption of response
ResponseToGetMessageId rsp2GetMsgID;
ResponseToStoreDelivery rsp2StoreDel = null;
Signer alice;
Originator user_1;
// Role user_1;
Addressee user_2;
StoreDelivery storeDel;
ContentContainer not_encrypted_container;
Decrypter decrypter;

GetMessageId getMsgID;

try {
alice = new de.osci.osci12.samples.impl.crypto.PKCS12Signer(
new FileInputStream(aliceSignature), "123456");
decrypter = new de.osci.osci12.samples.impl.crypto.PKCS12Decrypter(
new FileInputStream(aliceCypher), "123456");
user_1 = new Originator(alice, decrypter);

// Create a DialogHandler
clientDialog = new DialogHandler(user_1, intermed,
new de.osci.osci12.samples.impl.HttpTransport());

// Default configuration is transport encryption and signature
// activated
// clientDialog.setCreateSignatures(false);
// Create the GetMessageId-Request
getMsgID = new GetMessageId(clientDialog);

// Transmit the request and receive the response
rsp2GetMsgID = getMsgID.send();

// Error handling
if (!rsp2GetMsgID.getFeedback()[0][1].startsWith("0")) {
// do error handling
}


// Now we have a message-Id, we are ready to send the
// StoreDelivery-request
// First we need to create the Addressee-object representing the
// user 2.
// The signature certificate is not needed since we do not
// expect a signed response from the addressee in this secenario
// (it would be included in a signed response anyway).

user_2 = new Addressee(null, de.osci.helper.Tools
.createCertificate(new FileInputStream(bobCypher)));

// de.osci.helper.Tools.createCertificate(getClass().getResourceAsStream("/de/osci/osci12/samples/zertifikate/test_bob_cypher.cer")));

// Create the StoreDelivery-message object
storeDel = new StoreDelivery(clientDialog, user_2,
rsp2GetMsgID.getMessageId());
storeDel.setSubject("Test QSS-Subject");
// We trust the intermediary's time stamp (default)
storeDel.setQualityOfTimeStampCreation(false);
storeDel.setQualityOfTimeStampReception(false);

// Add not encrypted Content-Data
not_encrypted_container = new ContentContainer();
not_encrypted_container.addContent(new Content(
"Any content data. QSS Test"));

// not_encrypted_container.addContent(new Content(new Attachment(new
// ByteArrayInputStream("Any unencrypted attachment data.".getBytes()),
// / "test.txt")));
not_encrypted_container.sign(user_1);
storeDel.addContentContainer(not_encrypted_container);

// Add encrypted Content-Data
/*
* Reader reader = new
* Reader(de.osci.helper.Tools.createCertificate(
* getClass().getResourceAsStream
* ("/de/osci/osci12/samples/zertifikate/test_dave_cypher.cer")));
* ContentContainer encrypted_container = new ContentContainer();
* encrypted_container.addContent(new
* Content("Any encrypted content data."));
* encrypted_container.addContent(new Content(new Attachment(new
* ByteArrayInputStream
* ("Any encrypted attachment data.".getBytes()), "enc_test.txt",
* Constants.SYMMETRIC_CIPHER_ALGORITHM_TDES_CBC)));
*
* EncryptedDataOSCI encryptedData = new
* EncryptedDataOSCI(Constants.SYMMETRIC_CIPHER_ALGORITHM_AES128,
* encrypted_container); encryptedData.encrypt(reader);
* storeDel.addEncryptedData(encryptedData);
*/

// Transmit the request and receive the response

/* FEHLER HIER */
// Hier wird eine Exception geworfen die von
// de.osci.helper.SymCipherOutputStream geworfen wird
// exception ist:
// throw new
// IOException(DialogHandler.text.getString("encryption_error"));
//
rsp2StoreDel = storeDel.send();

if (!rsp2StoreDel.getFeedback()[0][1].startsWith("0")) {
// Error handling
}

// Optional: Check process card bundle (result of certificate check
// etc.)
rsp2StoreDel.getInspections();
rsp2StoreDel.getTimestampCreation();
rsp2StoreDel.getRecentModification();

// ....
} catch (Exception e) {
e.printStackTrace();
}
return rsp2StoreDel;
}

/**
* Main entry.
* @param args must contain one string with the intermediary URL
*/
public static void main(String[] args)
{
try
{
OSCITest scenario_1 = new OSCITest("http://194.95.255.146/osci-manager-entry/externalentry");
ResponseToStoreDelivery responseStore = scenario_1.sendStoreDelivery();
System.out.println("\nResponseToStoreDelivery:\n" + responseStore.toString());

// ResponseToFetchDelivery responseFetchDel = scenario_1.sendFetchDelivery(responseStore.getMessageId());
// Reader reader = new Reader(new de.osci.osci12.samples.impl.crypto.PKCS12Decrypter("/de/osci/osci12/samples/zertifikate/test_dave_cypher.p12",
// "123456"));
// System.out.println("\nResponseToFetchDelivery:\n" + responseFetchDel.toString());

/* ResponseToFetchProcessCard responseFetchProcCard = scenario_1.sendFetchProcessCard(responseStore.getMessageId());
System.out.println("\nResponseToFetchProcessCard:\n" + responseFetchProcCard.toString());
// When a message of unknown content structure is received, the content types must
// be analyzed (e.g. using Content.getContentType())
System.out.println("\nCONTENT DATA:\n" +
responseFetchDel.getContentContainer()[0].getContents()[0].getContentData());

InputStream in = responseFetchDel.getContentContainer()[0].getContents()[1].getAttachment().getStream();
StringBuffer attachment = new StringBuffer();
int i;

while ((i = in.read()) > -1)
attachment.append((char) i);

in.close();
System.out.println("\nATTACHMENT:\n" + attachment);
System.out.println("\nRESULT OF SIGNATURE CHECK: " +
responseFetchDel.getContentContainer()[0].checkAllSignatures());
System.out.println("\nENCRYPTED CONTENT DATA:\n" +
responseFetchDel.getEncryptedData()[0].decrypt(reader).getContents()[0].getContentData());
*/
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
}


Der "originale Code sieht so aus"

public ResponseToStoreDelivery sendStoreDelivery() throws GeneralSecurityException,
IOException,
OSCIException
{
// Create the Originator-object. Since we have the private key(s), we use this
// Constructor. We need a Decrypter-object for decryption of response
Originator user_1 = new Originator(new de.osci.osci12.samples.impl.crypto.PKCS12Signer("/de/osci/osci12/samples/zertifikate/test_alice_signature.p12",
"123456"),
new de.osci.osci12.samples.impl.crypto.PKCS12Decrypter("/de/osci/osci12/samples/zertifikate/test_alice_cypher.p12",
"123456"));

// Create a DialogHandler
DialogHandler clientDialog = new DialogHandler(user_1, intermed, new de.osci.osci12.samples.impl.HttpTransport());

// Default configuration is transport encryption and signature activated
//clientDialog.setCreateSignatures(false);
// Create the GetMessageId-Request
GetMessageId getMsgID = new GetMessageId(clientDialog);

// Transmit the request and receive the response
ResponseToGetMessageId rsp2GetMsgID = getMsgID.send();

// Error handling
if (!rsp2GetMsgID.getFeedback()[0][1].startsWith("0"))
{
// do error handling
}

// Now we have a message-Id, we are ready to send the StoreDelivery-request
// First we need to create the Addressee-object representing the user 2.
// The signature certificate is not needed since we do not
// expect a signed response from the addressee in this secenario
// (it would be included in a signed response anyway).
Addressee user_2 = new Addressee(null,
de.osci.helper.Tools.createCertificate(getClass().getResourceAsStream("/de/osci/osci12/samples/zertifikate/test_bob_cypher.cer")));

// Create the StoreDelivery-message object
StoreDelivery storeDel = new StoreDelivery(clientDialog, user_2, rsp2GetMsgID.getMessageId());
storeDel.setSubject("Subject");
// We trust the intermediary's time stamp (default)
storeDel.setQualityOfTimeStampCreation(false);
storeDel.setQualityOfTimeStampReception(false);

// Add not encrypted Content-Data
ContentContainer not_encrypted_container = new ContentContainer();
not_encrypted_container.addContent(new Content("Any content data."));
not_encrypted_container.addContent(new Content(new Attachment(new ByteArrayInputStream("Any unencrypted attachment data.".getBytes()),
"test.txt")));
not_encrypted_container.sign(user_1);
storeDel.addContentContainer(not_encrypted_container);

// Add encrypted Content-Data
Reader reader = new Reader(de.osci.helper.Tools.createCertificate(getClass().getResourceAsStream("/de/osci/osci12/samples/zertifikate/test_dave_cypher.cer")));
ContentContainer encrypted_container = new ContentContainer();
encrypted_container.addContent(new Content("Any encrypted content data."));
encrypted_container.addContent(new Content(new Attachment(new ByteArrayInputStream("Any encrypted attachment data.".getBytes()),
"enc_test.txt",
Constants.SYMMETRIC_CIPHER_ALGORITHM_TDES_CBC)));

EncryptedDataOSCI encryptedData = new EncryptedDataOSCI(Constants.SYMMETRIC_CIPHER_ALGORITHM_AES128,
encrypted_container);
encryptedData.encrypt(reader);
storeDel.addEncryptedData(encryptedData);

// Transmit the request and receive the response
ResponseToStoreDelivery rsp2StoreDel = storeDel.send();

if (!rsp2StoreDel.getFeedback()[0][1].startsWith("0"))
{
// Error handling
}

// Optional: Check process card bundle (result of certificate check etc.)
rsp2StoreDel.getInspections();
rsp2StoreDel.getTimestampCreation();
rsp2StoreDel.getRecentModification();

// ....
return rsp2StoreDel;
}


Eigentliches Ziel, eine "funktionierende" OSCI Nachricht an den OSCI
Testintermediär schicken...

Deswegen meine Frage ob da jemand vielleicht etwas lauffähiges hat.

Was übersehe ich hier?

Friedrich Dominicus

unread,
Sep 21, 2009, 6:43:05 AM9/21/09
to
Entschuldigung für das Followup. Ich bekomme eine
GeneralSecurityException. Das habe ich vergessen zu schreiben..

Kann jemand damit etwas anfangen?

Danke

Friedrich Dominicus

unread,
Sep 21, 2009, 10:36:16 AM9/21/09
to
Friedrich Dominicus <just-for-...@q-software-solutions.de>
writes:

>
> Kann jemand damit etwas anfangen?

Ok es handelte sich genau um eine InvalidKeyException, was ich nicht
verstehen konnte aber dann habe ich mal gesucht und das gefunden:
https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=jce_policy-6-oth-JPR@CDS-CDS_Developer

Nach der Installation lief der Code durch.

Wie soll man auf so etwas kommen?

Also nun habe ich das erste mal eine Auslieferung an diesen
verd... OSSI-Testintermediär geschickt bekommen.

Das war echt mühselig...

Grüsse aus Heidelse

0 new messages