SignServer » Installation

Installation

Cet article est également disponible en fichier PDF, consulter les pièces jointes tout en bas de la page

Installation de SignServer 3.2 (trunk)

Avril 2011

Revision History
0.1 Création
0.2 Rajout de la section pour obtenir les JAR nécessaire au WebServices
0.3 Rajout de la section version de production

Introduction

Ce document décrit l'installation et l'utilsation de l'application SignServer. SignServer est une application édité par la société suédoise PrimeKey, spécialisé dans les logiciels de sécurité, il est publié sous license LGPL, et peut donc être utilisé dans un contexte commercial.

La version utilisé dans ce document est la version trunk.

Prérequis

Dans sa version 3.1, SignServer nécessite les éléments suivants :

  • le client subversion ;

  • le serveur d'application JBoss, dans sa version 4.2.3 (aucune autre version de JBoss n'est supportée en date de rédaction du présent document) ;

  • une base de données MySQL, en version 5 (aucun autre SGBD n'est actuellement supporté) ;

  • le connecteur JDBC MySQL dans sa version 5.

Installation de l'application SignServer

Obtention des sources

Récuperer le trunk en utilisant la commande suivante : svn co https://signserver.svn.sourceforge.net/svnroot/signserver/trunk/signserver

Création de la base de donnée

Se connecter en root sur le serveur MySQL, et créer un utilisateur avec une base de donnée spécifique :

mysql> create database signserver;
mysql> grant all privileges on signserver.* to signserver@'localhost' identified by 'signserver';

Construction de SignServer

Extraire l'archive JBoss 4.2.x, puis définir les variaobles d'environnement suivantes :

  • APPSRV_HOME vers le répertoire d'extraction de JBOSS ;

  • ANT_HOME vers le répertoire d'extraction de l'archive Ant ;

  • SIGNSERVER_NODEID avec la valeur 1.

Créer le fichier signserver_build.properties à partir du fichier signserver_build.properties.sample, puis éditer ce fichier, voici un exemple de fichier complet :

appserver.type=jboss
appserver.home=${env.APPSRV_HOME}
j2ee.web-nohttps=true
database.name=mysql
database.url=jdbc:mysql://127.0.0.1:3306/signserver
database.driver=com.mysql.jdbc.Driver
database.username=signserver
database.password=signserver
signingandvalidationapi.enabled=true

Compiler SignServer à l'aide des commandes suivantes :

  • $ANT_HOME/bin/ant clean ;

  • $ANT_HOME/bin/ant deploy ;

  • Copier le driver JDBC MySQL dans le répertoire $JBOSS_HOME/server/default/lib

  • Procéder au démarrage de JBoss en rajoutant l'option -b 0.0.0.0 et vérifier qu'il n'y a pas d'erreur.

Utilisation des Webservices SOAP

Modifier le fichier $JBOSS_HOME/server/default/deploy/jbossws.sar/jbossws.beans/META-INF/jboss-beans.xml pour commenter la ligne <property name="webServiceHost">${jboss.bind.address}</property>.

Installation du module de signature PDF

Chargement du module

Exécuter la commandes suivante :

./bin/signserver.sh module add dist-server/pdfsigner.mar demo

Le mot clé demo correspond à un fichier de configuration contenant des propriétées par défaut. Ces fichiers sont visibles dans le répertoire src/conf des sources du module correspondant.

Injection du certificat signataire

Faire la demande de signature de certificat avec la commande suivante :

Exécuter les commandes suivantes :

./bin/signserver.sh generatecertreq 1 'CN=Digital Signature,OU=OpenCSI,C=FR' "SHA256WithRSA" /tmp/certreq.pem

Le fichier /tmp/signserver00.pem contient une demande de certificat (CSR) qu'il faut signer à l'aider de votre PKI. Une fois le certificat obtenu, il convient de le téléverser vers SignServer à l'aide des commantes suivantes :

./bin/signserver.sh uploadsignercertificate 1 GLOB /tmp/signserver00.pem
./bin/signserver.sh uploadsignercertificatechain 1 GLOB /tmp/OpenCSIROOTCA.pem
./bin/signserver.sh reload 1

Vérification du bon fonctionnement

Une page Web de signature est disponible à l'adresse http://<nom d'hôte>:8080/signserver/demo/pdfsign.jsp.

Installation du module d'horodatage (TSA)

Procéder de la même manière qu'avec le module PDF mais en chargeant le module dist-server/tsa.mar toujours en utilisant les propriétés demo. N'oubliez pas d'injecter le certificat signataire, puis de rechargher le module. Pour vérifier le bon fonctionnement du module, exécuter les commandes suivantes (appuyer sur Control-C pour sortir) :

cd dist-client/timestampclient/
java -jar timeStampClient.jar 'http://localhost:8080/signserver/process?workerName=TSA'
INFO  Got reply after 441 ms
INFO  TimeStampRequest validated
INFO  Got reply after 34 ms
INFO  TimeStampRequest validated

Configuration de production

Pour une version de production de SignServer, il est nécessaire de disposer de fichiers PKCS#12 contenant les certificats (et clés privées correspondantes) signataires pour chaque module. Puis créer les fichiers de configurations suivants :

modules/SignServer-Module-PDFSigner/src/conf/production-part-config.properties

GLOB.WORKERGENID1.CLASSPATH = org.signserver.module.pdfsigner.PDFSigner
GLOB.WORKERGENID1.SIGNERTOKEN.CLASSPATH = org.signserver.server.cryptotokens.P12CryptoToken
WORKERGENID1.NAME=PDFSigner
WORKERGENID1.AUTHTYPE=NOAUTH
WORKERGENID1.REASON=Document signe par OpenCSI
WORKERGENID1.LOCATION=Paris
WORKERGENID1.ADD_VISIBLE_SIGNATURE = False
#WORKERGENID1.VISIBLE_SIGNATURE_PAGE = First
#WORKERGENID1.VISIBLE_SIGNATURE_CUSTOM_IMAGE_PATH=/home/openam/etc/signserver/logo.jpg
WORKER1.KEYSTOREPATH=/home/openam/etc/keystores/signserver00.p12
WORKER1.KEYSTOREPASSWORD=foo123

N'oubliez pas de modifier les propertiés WORKER1.KEYSTOREPATH et WORKER1.KEYSTOREPASSWORD avec les bonnes valeurs. Si vous souhaitez rendre la signature visible, modifier la propriété WORKERGENID1.ADD_VISIBLE_SIGNATURE à True et décommentez la propriétés WORKERGENID1.VISIBLE_SIGNATURE_PAGE, et le cas échéant définir le chemin d'un logo avec la propriété WORKERGENID1.VISIBLE_SIGNATURE_CUSTOM_IMAGE_PATH.

modules/SignServer-Module-TSA/src/conf/production-part-config.properties

GLOB.WORKERGENID1.CLASSPATH = org.signserver.module.tsa.TimeStampSigner
GLOB.WORKERGENID1.SIGNERTOKEN.CLASSPATH = org.signserver.server.cryptotokens.P12CryptoToken
WORKERGENID1.NAME=TSA
WORKERGENID1.AUTHTYPE=NOAUTH
WORKERGENID1.DEFAULTTSAPOLICYOID=1.2.3
WORKERGENID1.KEYSTOREPATH=/home/openam/etc/keystores/signserver01.p12
WORKERGENID1.KEYSTOREPASSWORD=foo123

N'oubliez pas de modifier les propertiés WORKER1.KEYSTOREPATH et WORKER1.KEYSTOREPASSWORD avec les bonnes valeurs.

Chargement des modules

Avant de charger les modules, vous devez reconstruire les différentes archives pour rajouter vos fichiers de configurations, pour cela, utiliser la commande ant modules. Une fois les modules construits, procéder à leur chargement en utilisant les commandes :

./bin/signserver.sh module add dist-server/pdfigner.mar production
./bin/signserver.sh module add dist-server/tsa.mar production

Procéder à la vérification des modules, si tout est conforme, vous pouvez activer l'ajout du jeton d'horodatage dans la signature des documents PDF en exécutant les commandes suivantes :

./bin/signserver.sh setproperty PDFSigner TSA_URL http://localhost:8080/signserver/process?workerName=TSA
./bin/signserver.sh reload 1

Signature d'un document via l'API SignServer

Vérifier que vous disposer du répertoire $SIGNSERVER_HOME/dist-client/signserverandvalidationapi. Si ce n'est pas le cas, modifier dans le ficher signserver_build.properties que la valeur signingandvalidationapi.enabled est à true, puis exécuter la commande ant (sans argument).

Copier les JAR depuis $SIGNSERVER_HOME/dist-client/signserverandvalidationapi/lib ainsi que le jar $SIGNSERVER_HOME/modules/SignServer-Client-SigningAndValidationAPI/signserverandvalidationapi.jar. Voici un code d'exemple :

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.signserver.client.api.ISigningAndValidation;
import org.signserver.client.api.SigningAndValidationWS;
import org.signserver.common.GenericSignResponse;
 
/**
 *
 * @author bbonfils
 */
public class SignServerClient {

    public SignServerClient(String input, String output) {
        byte[] inputByte = readFile(input);
        byte[] signedByte = signDocument(inputByte);
        writeFile(signedByte, output);
    }

    public final byte[] readFile(String filename) {
        File file = new File(filename);
        byte[] b = new byte[(int) file.length()];
        try {
            FileInputStream instream = new FileInputStream(file);
            instream.read(b);


        } catch (Exception e) {
            System.err.println("Exception: " + e);
        }

        return b;
    }

    public final void writeFile(byte[] data, String filename) {
        File file = new File(filename);
        try {
            FileOutputStream outStream = new FileOutputStream(file);
            outStream.write(data);
            outStream.close();
        } catch (Exception e) {
            System.err.println("writeFile exception: " + e);
        }

    }

    public final byte[] signDocument(byte[] data) {
        byte[] signedData = null;
        try {
            ISigningAndValidation signserver = new SigningAndValidationWS("tests.asyd.net", 8080);
            GenericSignResponse signResp = signserver.sign("PDFSigner", data);
            signedData = signResp.getProcessedData();


        } catch (Exception e) {
            System.err.println("signDocument exception: " + e);

        }

        return signedData;
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        if (args.length == 2) {
            SignServerClient client = new SignServerClient(args[0], args[1]);
        } else {
            System.out.println("Invalid syntax");
        }
    }
}
Tags:
Created by Bruno Bonfils on 2011/06/14 10:48

OpenCSI SAS Contact
3.0.36132