Table des matières
0 billet(s) pour février 2026
Mettre en place un serveur Jabber avec du TLS et du Forward Secrecy
Title: Mettre en place un serveur Jabber avec du TLS et du Forward Secrecy
Authors: skhaen
ZeroHeure, palm123, NeoX et Nÿco
Date: 2015-01-26T19:38:08+01:00
License: CC by-sa
Tags: tls, ssl, prosody, xmpp, jabber, serveur_jabber_tls et sécurité
Score: 45
URL: [[http://linuxfr.org/news/mettre-en-place-un-serveur-jabber-avec-du-tls-et-du-forward-secrecy]]
J'ai publié il y a quelques mois un tuto pour mettre en place “facilement” un serveur XMPP/Jabber avec Prosody et du SSL/TLS plutôt bien configuré sous Debian, j'ai eu pas mal de retours positifs depuis et je pense qu'il pourrait intéresser d'autres personnes.
—-
Installation
Pour installer Prosody sous Debian, il suffit de rajouter le dépôt dans son *sources.list*, on peut utiliser la ligne suivante pour le faire. Elle permet de simplifier énormément la manipulation (pour les détails, c'est ici) :
echo "deb http://packages.prosody.im/debian $(lsb_release -sc) main" | sudo tee -a /etc/apt/sources.list
Puis on ajoute la clé GPG du dépôt :
wget https://prosody.im/files/prosody-debian-packages.key -O- | sudo apt-key add -
On met à jour les dépôts, puis on installe Prosody :
aptitude update && aptitude install prosody
Le paquet **lua-sec** dans Debian est légèrement… ancien, si vous voulez les derniers algorithmes de chiffrement et que le Perfect Forward Secrecy soit pris en compte, il faut le mettre à jour.
Sur Debian Wheezy :
echo "deb http://ftp.debian.org/debian wheezy-backports main" >> /etc/apt/sources.list aptitude update && aptitude -t wheezy-backports install lua-sec-prosody
Configuration
L'ensemble de la configuration se fait dans un seul fichier :
/etc/prosody/prosody.cfg.lua
La première partie est commune à l'ensemble des VirtualHosts que vous allez mettre en place. Ce qui sera écrit sous chaque *VirtualHost “exemple.com”* (en bas) sera propre à chaque VirtualHost.
Ce qui veut dire que si vous mettez votre configuration SSL dans la première partie, elle sera commune à tous les VirtualHosts. Faites attention aux répercussions que ça peut avoir
La première brique
Ouvrez le fichier avec votre éditeur préféré (pour moi ça sera vim)
vim /etc/prosody/prosody.cfg.lua
Il faut modifier/compléter les champs suivants (avec évidemment vos informations à la place de *example.tld*) :
Qui est administrateur du serveur (tout en haut du fichier) ?
admins = {"admin@exemple.tld"}
Voulez-vous autoriser les inscriptions sur votre serveur ? À moins de savoir ce que vous faites, je vous conseille grandement de le mettre sur false afin d'éviter de servir aux spammeurs et aux bots.
allow_registration = false;
Quel domaine voulez-vous utiliser (tout en bas du fichier) ? N'oubliez pas de changer *example.tld* pour votre domaine.
VirtualHost "example.tld" enabled = true
Les logs
C'est très important (et déjà partiellement configuré). Ils permettent de trouver où est le problème quand ça ne marche pas (pour plus de détails sur la configuration : logging, la modification par rapport au fichier original consiste à mettre le *prosody.log* en *warn* et non plus en *info* et à faire la même manipulation pour le *syslog* :
log = {
warn= "/var/log/prosody/prosody.log";
error = "/var/log/prosody/prosody.err";
{ levels = { "error" }; to = "syslog"; };
Si vous avez un problème à régler, je vous conseille de rechanger le premier *warn* pour *debug*, puis de redémarrer prosody (via la commande prosodyctl restart), vous aurez alors toutes les informations qu'il vous faut dans */var/log/prosody/prosody.log* et bien plus encore pour trouver d'où ça vient.
Un minimum de sécurité
De base, Prosody enregistre les mots de passe des comptes en clair sur le serveur, pour qu'ils soient hashés, il faut modifier la ligne authentication = “internal_plain” par la ligne suivante :
authentication = "internal_hashed"
prosodyctl
Prosody vient avec une commande qui aide à communiquer avec lui facilement : *prosodyctl*, et qui s'utilise sous la forme suivante :
prosodyctl COMMAND [OPTIONS]
Où *COMMAND* peut être :
adduser- exemple@exemple.tld - crée le compte utilisateurpasswd- exemple@exemple.tld - configure le password de l'utilisateurdeluser- exemple@exemple.tld - supprime l'utilisateurstart- démarre Prosodystop- arrête Prosodyrestart- redémarre Prosodyreload- recharge la configuration de Prosodystatus- indique le status actuel de Prosody
Plutôt utile non ? :]
Nous allons ajouter un utilisateur (il vous demandera un mot de passe), puis nous rechargerons la configuration pour prendre en compte les changements (exemple.tld doit être le même que vous avez mis pour votre VirtualHost) :
prosodyctl adduser exemple@exemple.tld
prosodyctl reload
Et là, c'est l'instant de plaisir, si vous essayez de vous connecter avec un client jabber (comme pidgin), ça devrait se connecter. Si ce n'est pas le cas (faire dans l'ordre) :
- voir les logs de prosody,
- voir les logs de votre client jabber,
- changer les logs de prosody de info à debug,
- boire un thé (ou une bière)
- vérifier votre firewall,
- rebrancher la box,
- reprendre un thé,
- changer de FAI.
Les modules
Comme vous pouvez le voir dans le fichier de configuration, il y a déjà un certain nombre de modules qui sont activés par défaut (roster, saslauth, tls, posix…). ils sont dans la partie modules_enabled = { }.
Si je vous parle de ça, vous vous doutez que ce n'est pas pour rien, il existe beaucoup de modules, dont un pour Tor :
- liste des modules : core modules,
- liste des modules tiers : prosody-modules,
- mod_onions : XMPP Federation Over Tor Hidden Services.
Chiffrons tout pour tout le monde
Manifesto - *A public statement about ubiquitous encryption on the XMPP network.*
Si vous ne connaissez pas (ou mal) le SSL/TLS, je ne peux que vous conseiller d'attaquer le sujet par la conférence de Benjamin Sonntag dans le cadre du cycle de conférence « *Il était une fois Internet* ».
Création du certificat
Si votre certificat n'est pas reconnu « valide » par votre client jabber, par exemple en cas de certificat auto-signé, il demandera autorisation pour l'utiliser.
La méthode simple (et vraiment rapide)
La méthode « *simple* » consiste à la création d'un certificat auto-signé avec l'aide de prosodyctl :
# exemple.tld étant le domaine que vous avez mis dans prosody.cfg.lua prosodyctl cert generate exemple.tld
- vérifier l'emplacement des certificats une fois qu'ils sont générés
- vous pouvez les bouger dans */etc/prosody/certs/* si vous avez envie (on part du principe que c'est le cas pour la suite)
- N'oubliez pas les deux lignes suivantes :
chmod 600 /etc/prosody/certs/exemple.tld.key chown prosody:prosody /etc/prosody/certs/exemple.tld.key chown prosody:prosody /etc/prosody/certs/exemple.tld.crt
Pour aller plus loin :
- Prosody - certificats,
- Prosody - configuration SSL avancé
La méthode un peu moins simple mais qui est vachement mieux
Nous allons créer ce dont nous avons besoin en faisant une requête à startssl.com :
openssl req -sha256 -out /etc/prosody/certs/exemple.csr -new -newkey rsa:2048 -nodes -keyout /etc/prosody/certs/exemple.key
Cette commande génère (openssl req -out) une CSR (-new) ainsi qu'une nouvelle clé RSA de 2048 bits (-newkey rsa:2048) qui ne sera pas chiffrée (-nodes). Si vous voulez encore plus de détails, c'est sur openssl.org.
Je vous laisse sur startssl.com réaliser les différentes étapes pour s'inscrire (bonne chance !), il faut choisir la première formule (celle qui est gratuite). Après la création de votre compte, la validation de votre nom de domaine, etc. etc. nous pouvons passer à la suite.
- Après votre authentification sur le site, cherchez l'onglet « *Certificates Wizard* » qui se trouve normalement vers la gauche de votre écran,
- il vous demande alors pourquoi vous voulez un certificat (“*Select Certificate Purpose*”), vous choisissez donc XMPP (jabber) SSL/TLS certificate,
- le site vous demande de créer une clé privée (“*Generate Private Key*”) : VOUS NE LE FAITES PAS !, vous appuyez au contraire sur skip (nous avons créé la clé privée quelques lignes au dessus),
- vous arrivez maintenant sur la page de demande de certificat (“*Submit Certificate Request (CSR)*”), toujours dans un terminal, vous devez taper la commande suivante :
cat /etc/prosody/certs/exemple.csr
Cette commande vous donnera un résultat qui devrait ressembler à
-----BEGIN CERTIFICATE REQUEST----- MIIChjCCAW4CAQAwQTELMAkGA1UEBhMCRlIxCzAJBgNVBAgMAkZSMQswCQYDVQQH DAJGUjELMAkGA1UECgwCRlIxCzAJBgNVBAsMAkZSMIIBIjANBgkqhkiG9w0BAQEF AAOCAQ8AMIIBCgKCAQEAsoJcj6/bwl9naKG9C9seKt4HjBicV5o96zqoO0YxtJAe X9k2t4KTp0CrzQ85c9DfggY8oAMq/DX/xRFL0cPxamxSwwW5ttVoBQ04wBWDhjEo a2ixpe5UMmfakuY3Q56HsIbhh7Vo4RZS1OtPOv7E2J0CfDVUhrNCpDjZbtM8akTE 9P86BkXdroJgU8tfwONMFDBF2K8ElhN6mqftb89KGIUpgm1fcDq8woRpnFER7A3H OwfCfnlkLrtMWVca1smEWnlutBKw6cgk6uSMK9V9/Y44wMKZHoOrOQE0R26+MGrA MLhprqPaANIvhamq+tSsSASYZDeajDS3R1JWX188awIDAQABoAAwDQYJKoZIhvcN AQEFBQADggEBAHYSpBxHhRP87qmWNqp9Sf8dYz3oQfJLA2cLpQV2MOIfFW0mmOyz JG6TVISKVmiEHZtHqgW4TL3BSKBAWENBM8mjAjmxXCmy2MBSWBVhDVaGz4w+x3hO UMtNMubYxkkc/xgX5vwbuReH6y1sbkMUQm1UETb6Fnmm8dyDzwPI0zV+NdzUqqhI ARjMM2RrwPH7QZ2lSAOiB/X+fXKhwMSg0qUExYiln20JKBi6f58GdyOu6Hp/Fi+m r8xnIcnZ2ZIIyjh4B2bfAfybTOWHHRtOaI9yH8pTP3HnKqgbtxZJYqioTAAAQxjQ hFmXThFFrfhTDnqJ0Fc+bjcoiLoy46FtLz8= -----END CERTIFICATE REQUEST-----
Copiez-le dans la fenêtre en bas (de —--BEGIN CERTIFICATE REQUEST—-- à —--END CERTIFICATE REQUEST—-- !). Vous aurez alors votre certificat peu de temps après, transférez-le sur votre serveur, dans /etc/prosody/certs/ avec comme nom « exemple.tld.crt ».
Création d'un certificat chaîné
Pour créer un certificat chaîné, faites la manipulation suivante (startssl.com vous donne les liens vers ces deux certificats juste au dessus du bouton finish »» de la page Save Certificate) :
- télécharger le certificat intermédiaire de startssl :
wget https://www.startssl.com/certs/sub.class1.server.ca.pem
- puis le certificat root :
wget https://www.startssl.com/certs/ca.pem
- puis on forge le certificat chaîné (ne pas oublier les 2
») :
cat sub.class1.server.ca.pem >> /etc/prosody/certs/exemple.tld.crt cat ca.pem >> /etc/prosody/certs/exemple.tld.crt
Génération du dhparam
Création du dhparam prosody.im/dhparam :
openssl dhparam -out /etc/prosody/certs/dh-2048.pem 2048
Java ne peut pas utiliser un dhparam supérieur à 1024 bits, ce qui empêche d'utiliser par exemple le logiciel [Jitsi](https://jitsi.org). Pour éviter cela (c'est tout de même un client grandement utilisé), on peut générer un dhparam de 1024 bits avec la commande suivante (ne pas oublier de modifier la configuration pour remplacer dh-2048.pem par dh-1024.pem) :
openssl dhparam -out /etc/prosody/certs/dh-1024.pem 1024
Configuration du SSL/TLS
On retourne dans */etc/prosody/prosody.cfg.lua* :
- /etc/prosody/prosody.cfg.lua
ssl = { key = "/var/lib/prosody/exemple.tld.key"; certificate = "/var/lib/prosody/exemple.tld.cert"; dhparam = "/etc/prosody/certs/dh-2048.pem"; options = { "no_sslv2", "no_sslv3", "no_ticket", "no_compression", "cipher_server_preference", "single_dh_use", "single_ecdh_use" }; ciphers = "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH EDH+aRSA !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"; }
- c2s signifie « *Client TO Server* »,
- s2s signifie « *Server TO Server* ».
c2s_ports = { 5222 } s2s_ports = { 5269 } c2s_require_encryption = true s2s_require_encryption = true s2s_secure_auth = false allow_unencrypted_plain_auth = false;
*s2s_secure_auth* est sur *false* pour les [raisons suivantes](http://prosody.im/doc/s2s#security) ([TL;DR](http://www.urbandictionary.com/define.php?term=tl%3Bdr): possibilité de certificat auto-signé en face). Peut marcher avec *s2s_auth_fingerprint* mais c'est douloureux.
Les [options](https://prosody.im/doc/s2s#security) *s2s_secure_domains* et *s2s_insecure_domains* peuvent aussi vous intéresser, surtout si vous voulez parler avec des personnes qui sont sur gmail (ce qui veut dire que ça ne sera pas chiffré).
Concernant la ciphersuite, le choix par défaut de Prosody est déjà pas mal :
ciphers = "HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL";
Il faut tout de même enlever RC4 et eNULL, et tant qu'à faire, autant faire une liste de ciphers avec seulement du PFS Perfect Forward Secrecy (c'est à mettre dans le bloc ssl { }) :
ciphers = "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH EDH+aRSA !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
DNS
N'oubliez pas d'ajouter les enregistrements SRV dans vos DNS :
_xmpp-client._tcp.jabber IN SRV 0 5 5222 host.exemple.com. _xmpp-server._tcp.jabber IN SRV 0 5 5269 host.exemple.com.
Firewall
En cas de firewall, il faut ouvrir les ports 5269 et 5222 (IN et OUT) en TCP. La configuration pour *iptables* donne ceci :
iptables -I INPUT -p tcp --dport 5269 -j ACCEPT iptables -I OUTPUT -p tcp --sport 5269 -j ACCEPT iptables -I INPUT -p tcp --dport 5222 -j ACCEPT iptables -I OUTPUT -p tcp --sport 5222 -j ACCEPT
Test
Comme SSLLabs ou TestSSL.sh pour tester le SSL/TLS sur les serveurs webs, il existe xmpp.net pour les serveurs XMPP. Je vous conseille vivement de tester votre site !
Il faut toujours vérifier, même quand on pense pouvoir avoir confiance.
Si vous vous demandez comment améliorer votre note, c'est là : xmpp.net/about.
Source : http://linuxfr.org/news/mettre-en-place-un-serveur-jabber-avec-du-tls-et-du-forward-secrecy
Mes paquets Debian modifies
Paquet Debian à faire :
- vlock Hack
- WDFS : Création, car n'existe pas encore en paquet Debian
- Gostcrypt Ré-inclure le binaire gostcrypt_debian_7.4_amd64 (Correction bug Error: No such file or directory)
sed -i -e 's/libjpeg62.*,/libjpeg62-turbo,/' DEBIAN/control
- Création paquet gut ?
A ajouter dans le dépôt :
- atop netatop
- signify-openbsd
- Mondo
- afio ?
- Brackets
- ddrescueview
Voir https://www.deb-multimedia.org/pool/main/
Liste de paquets modifié, construit ou téléchargé perso :
- atop_2.2.3-1+jb1_amd64.deb
- atop-netatop-dkms_0.7-1+jb2_all.deb
- brackets.release.1.6.64-bit.deb
- ddrescueview_0.4~alpha2-1_amd64.deb
- gostcrypt_1.3-1~jb1.deb
- libdvdcss2_1.2.13-0_amd64.deb
- libmondorescue-perl_3.2.2-1_all.deb
- libprojectbuilder-perl_0.13.2-1_all.deb
- libqt3-mt_3.3.8b-7+b1~jb1_amd64.deb
- mindi_3.0.2-1_amd64.deb
- mindi-busybox_1.21.1-1_amd64.deb
- mondo_3.2.2-1_amd64.deb
- pdfedit_0.4.5-1_amd64.deb
- qarte_2.8.0-0ubuntu1_all.deb
- vlock_2.2.2-5+jb1_amd64.deb
- wdfs_1.4.2-1+jb-1_amd64.deb
vlock
Brouillons
wget http://ftp.fr.debian.org/debian/pool/main/v/vlock/vlock_2.2.2-3_amd64.deb apt-get download vlock for FIC in *.deb do mkdir ${FIC/.deb/} cd ${FIC/.deb/} ar x ../$FIC tar xf data.tar.* --same-owner cd - done #rm *.deb cp -p vlock_2.2.2-3_amd64/usr/lib/vlock/modules/new.so vlock_2.2.2-5_amd64/usr/lib/vlock/modules/ #cp -p vlock_2.2.2-3_amd64/DEBIAN/postinst vlock_2.2.2-5_amd64/DEBIAN/postinst chmod +x vlock_2.2.2-5_amd64/usr/lib/vlock/modules/new.so rm -f vlock_2.2.2-5_amd64/data.tar.* cd vlock_2.2.2-5_amd64 mkdir DEBIAN mv debian-binary DEBIAN/ cd DEBIAN/ tar --same-owner xf ../control.tar.gz rm -f ../control.tar.gz cd .. sed -i -e 's/^Version: \(.*\)$/Version: \1~jb1/' DEBIAN/control md5sum $(find . -not -wholename "./DEBIAN/*" -type f -not -name "debian-binary" )> DEBIAN/md5sums cd .. dpkg-deb --build vlock_2.2.2-5_amd64/
Note pour Redhat/CentOS
- bwm-ng
Mémoire Linux
Voir :
- /proc/sys/vm/compact_memory
- procmap
- pmap
- smem
- lsmem / chmem
Fuite mémoire
Voir :
- Valgrind
- https://github.com/iovisor/bcc/blob/master/README.md tools/memleak
Config
Kernel Linux param
NUMA (Non-Uniform Memory Access)
Voir :
numatop
Disable NUMA (Pour Oracle DB) /usr/share/doc/kernel-doc-4.18.0/Documentation/x86/x86_64/boot-options.txt
numa=off Only set up a single NUMA node spanning all memory.
Vérif
numactl command can be used to check the status of NUMA
# numactl -H | grep available available: 8 nodes (0-7)
# numactl -H | grep available available: 2 nodes (0-1)
If the number of available nodes is 2 nodes (0-1) or 8 nodes (0-7) then NUMA is enabled
If the number of available nodes is 1 nodes (0) then NUMA is not enabled.
Voir aussi :
- numastat
- numademo
NUMA (Non-Uniform Memory Access) - Useful Commands
To identify NUMA nodes, socket memory and CPU core allocation
numactl -H
To identify the NUMA node local to an adapter
cat /sys/class/net/<interface>/device/numa_node
To identify memory allocation and use on a particular NUMA node:
cat /sys/devices/system/node/node<N>/numastat
To identify NUMA node mapping to cores, use one of the following
numactl --hardware cat /sys/devices/system/node/node<N>/cpulist
Driver Loading - NUMA Node
numactl --cpunodebind=1 onload_tool reload
Memory usage per user
smem -u
Transparent HugePages (THP)
Voir
Désactiver **Transparent HugePages (THP)**
cat /sys/kernel/mm/transparent_hugepage/enabled
The following is a sample output that shows Transparent HugePages are being used as the [always] flag is enabled.
[always] never
Paramètre Kernel Linux
transparent_hugepage=never
Notes Free / Aviable
$ ./centreon_plugins.pl --plugin os::linux::snmp::plugin --mode memory --hostname localhost --help
...
--patch-redhat
If using Red Hat distribution with net-snmp >= 5.7.2-43 and
net-snmp < 5.7.2-47. But you should update net-snmp!!!!
This version: used = memTotalReal - memAvailReal // free =
memAvailReal
Others versions: used = memTotalReal - memAvailReal - memBuffer
- memCached // free = total - used
Exemple
free -mt vmstat -SM 45 10 vmstat -SM -a 45 10 ps -C apache2 -o rss --no-headers |tr "\n" "+" | sed -e 's/+$/\n/' |bc ps -e -o pid,user,%mem,rss,vsize,cmd --sort rss ps -e -o pid,user,%mem,rss,vsize,cmd --sort vsize ps -u $USER -o comm,vsz,pcpu | sort -nrk2 ps -eo comm,pcpu,pmem,rss --sort rss | tail -n 30 | tac
read CommitLimit Committed_AS <<< $(egrep "CommitLimit|Committed_AS" /proc/meminfo |awk '{print $2}') echo $(( Committed_AS * 100 / CommitLimit))
memused=$(free |grep "buffers/cache" |awk '{print $3}') memtotal=$(free |grep ^Mem | awk '{print $2}') echo $(( memused * 100 / memtotal))
memFree=$(free |grep ^-|awk '{print $3}') memTot=$(free |grep ^Mem |awk '{print $2}') memUsed=$(echo "scale=2 ; 100 * $memFree / $memTot" |bc) echo "$memUsed % Mem used" | grep ^[3-9][0-9]
ps -C apache2 -o rss --no-headers |tr "\n" "+" | sed -e 's/+$/\n/' |bc read CommitLimit Committed_AS <<< $(egrep "CommitLimit|Committed_AS" /proc/meminfo |awk '{print $2}') echo $(( Committed_AS * 100 / CommitLimit)) memused=$(free |grep "buffers/cache" |awk '{print $3}') memtotal=$(free |grep ^Mem | awk '{print $2}') echo $(( memused * 100 / memtotal)) ps -e -o pid,user,rss,vsize,cmd --sort rss
smem -u smem -u -t -k top -b -n 1 -u apache
Taille totale de la mémoire physique de la RAM (sans la swap)
# head -1 /proc/meminfo
MemTotal: 65391036 kB
# awk '/MemTotal/ { print $2 }' /proc/meminfo
65391036
Fonctionnement
Voir : OOM Killer et Overcommit Memory http://www.blog.florian-bogey.fr/empecher-les-depassements-de-memoire-sur-un-serveur-linux.html
Autres
Clearing KernelCare Cache
Source : https://www.linuxjournal.com/content/how-install-and-uninstall-kernelcare
rm -rf /var/cache/kcare/patches echo 1 > /proc/sys/vm/compact_memory echo 3 > /proc/sys/vm/drop_caches kcarectl –update
Memento OpenSSL
Source http://www.vincentliefooghe.net/node/113
Pour chiffrement de fichier voir scrypt
1 Si DSA :
openssl dsaparam -out dsaparam.pem 4096
2 Génération de la clef privée:
Si RSA
#openssl genrsa -des3 -out macle.key 2048 openssl genrsa -out macle.key 2048
Note : avec l'option -des3 openssl demande une passphrase
Si DSA
openssl gendsa -des3 -out macle.key dsaparam.pem
Si Elliptic Curve key
#openssl ecparam -genkey ....
N'oubliez pas de noter la pass phrase, elle sera utilisée par la suite
3 Génération d'un certificat auto-signé
openssl req -new -x509 -days 3650 -key macle.key -sha256 -extensions v3_ca -out macle.crt
Génération de la paire de certificat + clef en une seule ligne
openssl req -nodes -new -x509 -keyout server.key -out server.cert
4 Génération d'une demande de certificat (CSR)
Si on ne veut pas générer un certificat auto-signé (pas reconnu dans les navigateurs et clients), il faut généralement passer par une étape intermédiaire : générer un CSR (Certificate Signing Request) qui sera signé par une autorité de certification (les sociétés telles que Verisign, Thwate & Co). On peut aussi utiliser son propre certificat auto-signé comme certificat d'autorité par la suite.
openssl req -sha256 -new -key macle.key -out macle.csr -days 3650
5 Signature d'un CSR
On va signer la demande de certificat (.csr) avec la clé et le certificat de l'autorité de certification :
openssl ca -in macle.csr -out macle.crt -keyfile ca.key -cert ca.crt -days 3650 -extensions usr_cert -notext -md sha256
Il est parfois nécessaire de créer un fichier index.txt et serial (selon les O.S.). Par exemple sur un Linux RHEL / CentOS :
touch /etc/pki/CA/index.txt echo 0000 > /etc/pki/CA/serial
6 Vérification
On peut vérifier le certificat de plusieurs manières :
avec openssl verify, qui vérifie son DN et sa validité
avec openssl x509, qui dump le contenu du certificat
on peut ajouter une option pour vérifier le “chaining” avec le certificat de l'autorité :
¢ openssl verify -CAfile ca.crt macle.crt macle.crt: OK
Autre
Suppression de la pass-phrase d'une clé
$ cp macle.key macle.key.avecpass $ openssl rsa -in macle.key.avecpass -out maclesanspass.key Enter pass phrase for macle.key.avecpass: writing RSA key
Conversion en format PKCS12
Le format PKCS12 contient le certificat et la clé ; il est parfois utilisé pour l'import d'un certificat dans des keystore Java ou par des utilitaires Windows.
Il faut disposer de la clé privé et du certificat pour les exporter au format pkcs12 :
openssl pkcs12 -export -inkey macle.key -in macle.crt -name AliasDeLaCle -out macle.p12
Conversion
Convert PEM to PKCS12
openssl pkcs12 -export -inkey privatekey.pem -in cert.pem -certfile cacert.pem -out bundle.p12
Convert PKCS12 file to PEM (you can then chop the files up with a text editor)
openssl pkcs12 -nodes -in bundle.p12 -out bundle.pem
Convert DER (binary) to PEM
openssl x509 -inform der -in plop.local.cer -out plop.local.pem
MDP pam Empêcher de réutiliser un ancien mot de passe utilisateur
Tester sur Debian Jessie
touch /etc/security/opasswd chmod 700 /etc/security/opasswd chown root:root /etc/security/opasswd
Dans le fichier /etc/pam.d/common-password, ajouter remember=5 dans la ligne appelant le module pam_unix.so
- /etc/pam.d/common-password
#password [success=1 default=ignore] pam_unix.so obscure use_authtok try_first_pass sha512 password [success=1 default=ignore] pam_unix.so obscure use_authtok try_first_pass sha512 remember=5
Tester si c'est ok
