Configuration HTTPS sur Apache2

Il s’agit de configurer un acces par https sur un serveur Apache2 tel que distribué par Suse.
Tout d’abord, il faut activer le module ssl dans la configuration. pour celà, éditer le fichier de paramétrage général /etc/sysconfig/apache2 et ajouter à la variable APACHE_MODULES le mot clef ssl. Il faut ensuite ajouter SSL à la variable APACHE_SERVER_FLAGS. Dès lors au prochain démarrage le module SSL sera activé. La configuration par défaut des modules doit suffire.

Il faut ensuite créer les clefs nécessaires à l’établissement de la session crypté. Pour un usage de test ou privé, il est possible de créer soit même ses clef :

    • La première est la clef serveur : elle doit être enregistrée dans le répertoire /etc/apache2/ssl.key sous le nom server.key. Sa création se fait à l’aide de la commande suivantes :
      openssl genrsa -des3 -rand file1:file2:file3 -out /etc/apache2/ssl.key/server.key 1024 pour une clef de 1024bit RSA cryptée par triple DES utilisant pour la génération de nombre aléatoire les fichier file1 à file3 (ou plus) passés en paramètre. Il est conseillé d’utiliser des fichiers gzip comme source aléatore. Un mot de passe sera demandé pour protéger la clef.
      Créé de cette façon là, le serveur demandera de lui fournir le mot de passe à chaque démarrage pour décrypter le certificat. il est donc possible de stocker une version non cryptée de la clef à l’aide de la commande suivante : openssl rsa -in server.key -out server.pem. Bien sure cette solution plus simple est de moindre sécurité et l’accès à la clef doit être restraint.

 

    • La seconde clef est le certificat X509 à proprement parlé. Il est stocké dans le fichier /etc/apache2/ssl.csr et sa création se fait à partir de la clef RSA précédemment calculée. Sa génération est obtenu à l’aide de la commande suivante :
      openssl req -new -key /etc/apache2/ssl.key/server.key -out /etc/apache2/ssl.csr/server.csr : la commande vous demandera quelques informations permettant de remplir le certificat.

 

  • Le certificat doit ensuite être signé ; normalement c’est un organisme spécialisé (et payant) qui peut réaliser celà. Pour un usage de test, cette signature peut être faite soit même par la commande suivante :
    openssl x509 -req -days 365 -in /etc/apache2/ssl.csr/server.csr -signkey /etc/apache2/ssl.key/server.key -out /etc/apache2/ssl.crt/server.crt

La configuration de l’hôte ou de l’hôte virtuel se fait de la façon suivante en ajoutant les lignes :

SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:-eNULL
SSLCertificateFile /etc/apache2/ssl.crt/server.crt
SSLCertificateKeyFile /etc/apache2/ssl.key/server.pem
SetEnvIf User-Agent “.*MSIE.*” nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0

Les logs doivent être du type suivant : ssl_combined
Au passage, pour que cela fonctionne, il faut, selon votre config initiale avoir :

  • NameVirtualHost *:80
  • NameVirtualHost *:443

Ainsi apache va scanner les virtuals hosts à la fois pour le port 80 et le port 443. Sans celà le même (le premier) vhost avec un port 443 sera pris à chaque fois.

A la fin il reste à redemmarrer le serveur apache et tester …

Utilisation de AWT sur un serveur sans Xwindows

Lorsque l’on manipule de images, des fontes ou autre objets basés sur AWT, java utilisa par défaut des informations venant de votre serveur X ou de l’environnement graphique de Windows. (Sans doute hérité d’un passé Applet toujours présent). Lors de calculs coté serveur, ce fonctionnement peut poser problème : en effet pourquoi installer et démarrer X, et consommer de la mémoire inutilement pour une application web ?!?

Si vous êtes dans ce cas, voici l’option de la mort à passer à la JVM … cette variable est à initialiser avant de lancer le serveur d’application :

export JAVA_OPTS=”-DJava.awt.headless=true”

Voilà, c’est tout simple, j’espere que ceci vous aura éviter les 3heures passées à chercher le pourquoi du comment.

Connexion automatique avec ssh (clef rsa)

Vous souhaitez transférer de façon automatique une fichier via scp au travers d’un script sans que celui ne vous demande de saisir un mot de passe …
Ceci est tout à fait possible en utilisant le mode Batch de scp avec une authentification par partage de clef publique. Le système est simple à mettre en oeuvre :

Sur la machine depuis laquelle on souhaite se connecter :
Pour commencer il faut créer pour l’utilisateur qui va executer le script un couple de clefs publiques/privées. Pour ce, lancez pour cet utilisateur la commande ssh-keygen -t dsa en repondant par Entrée à chaque question. Cette commande va créer deux fichiers dans le répertoire ~/.ssh : id_dsa et id_dsa.pub.

Sur la machine sur laquelle l’on souhaite se connecter :
Copiez ensuite le contenu du fichier id_dsa.pub dans le fichier ~userCible/.ssh/authorized_keys. userCible étant l’utisitateur sous lequel vous allez vous connecter lors du transfert sur la machine distante.
Enfin, vérifier les doits d’accès qui doivent être 700 pour le répertoire .ssh et 644 pour le fichier authorized_keys.

Tester

Maintenant l’accès à la machine cible se fait simplement par la commande suivante : scp -B -i ~/.ssh/id_dsa userCible@destination:~/

Gare aux Auto-Virus

Qu’est-ce qu’un auto-virus (hormis un terme personnel qui vient de sortir de mon clavie) ?
C’est un virus qui par opposition aux virus classiques s’installe tout seul sur l’ordinateur sans réelle erreur de la part de l’utilisateur.
Par opposition aux virus commun que l’on déclenche en lançant pour une raison ou une autre un executable infecté.

Le dernier en date a fait du bruit, il profitait d’un trou de sécurité dans un des service réseau de Windows pour s’installer et se propager. L’utilisateur connecté à Internet était infecté sans toucher à son ordinateur.

Le nouveau trou de sécurité découvert dans les images jpeg pourrait être aussi dangereux vu le nombre d’images échangées par Mail et l’inoffencivité habituelle de ce type de fichier. D’autre part, un pirate malin pourrait falsifier des images sur des sites internet et ainsi très discrètement propager son virus … Les idées ne manqueront pas !

En cinq mots : METTEZ A JOUR VOS SYSTEMES !

Gestion des encodages des charactères dans les emails en java

Pour vous éviter de chercher 3 plombe la solution au problème des accents et autres caractères non US dans les e-mail, voici comment faire :

Comme dirait l’autre, RTFM, ceci dit la JavaDoc est tellement limpide sur ce point …

Donc, il suffit de spécifier lors de l’ajout des sujet et texte l’encodage “iso-8859-1″ et le tour est joué :

MimeMessage message = new MimeMessage(session);

message.setSubject(sujet,”iso-8859-1″);
message.setText(texte,”iso-8859-1”);
message.setHeader(“Content-Type”, “text/plain; charset=iso-8859-1”);
message.setHeader(“X-Mailer”,”Java”);

Faire executer un script par root

Admettons que vous ayez un acces utilisateur lambda a une de vos machine, par exemple au travers d’un script telnet HTTP. Vous souhaitez passer une commande qui necessite les droits root. Pour celà, la solution consiste à lancer la commande suivante :

echo RootPassword | exec su root -c Commande

Eventuellement, la Commande peut être l’appel à un script : “sh script”

Connaitre la version et le type d’un serveur web

Pour connaitre le type de serveur web a qui l’on a affaire, une solution est de se connecter à l’aide de la commande telnet sur le serveur et de l’interroger :

telnet adresse_serveur 80
puis tapez (rien ne va s’afficher)
GET / HTTP / 1.0
suivit de 2 carriage return

Le serveur doit vous renvoyer un message avec en entête sa version et son nom.