Web & Certificats SSL¶
Commandes pour gĂ©rer les certificats SSL¶
- Tester la clé privée :
openssl rsa -noout -modulus -in <FICHIER.KEY>
- Tester le certificat (CRT) :
openssl x509 -noout -modulus -in <FICHIER.CRT>
- Afficher la date d’expiration d’un certificat :
openssl x509 -in <FICHIER.CRT> -noout -enddate
- Afficher les informations essentielles d’un certificat :
openssl x509 -noout -in <FICHIER.CRT> -issuer -subject -dates
- Tester la connexion SSL sur un domaine :
openssl s_client -connect <DOMAIN.TLD>:443 </dev/null
- Afficher la date de validité et les noms DNS d’un certificat :
domaine=<DOMAIN.TLD>
openssl s_client -connect ${domaine}:443 </dev/null | openssl x509 -noout -dates
openssl s_client -connect ${domaine}:443 </dev/null | openssl x509 -noout -text | grep DNS
- Créer une clé privée 2048 bits :
openssl genrsa 2048 > <FICHIER.KEY>
- Générer une CSR (Certificate Signing Request) :
openssl req -new -key <FICHIER.KEY> -out <FICHIER.CSR>
- Afficher le contenu d’une CSR :
openssl req -in <FICHIER.CSR> -text -noout
- Concaténer clé, certificat et CA en un fichier PEM :
cat <FICHIER.KEY> <FICHIER.CRT> <CA.CRT> > <FICHIER.PEM>
- Générer un fichier PFX (Windows IIS) :
openssl pkcs12 -export -out <FICHIER.PFX> -inkey <FICHIER.KEY> -in <FICHIER.CRT> -certfile <CA.CRT>
- Afficher le contenu d’un fichier PFX :
openssl pkcs12 -info -in <FICHIER.PFX>
- Extraire la clé privée d’un fichier PFX :
openssl pkcs12 -in <FICHIER.PFX> -nocerts -out <FICHIER.KEY> -nodes
Installation basique Apache et Nginx avec vhost HTTP/HTTPS¶
Apache¶
- Installation (Debian/Ubuntu) :
apt update
apt install apache2
- Configuration minimale d’un VirtualHost avec SSL
Fichier exemple
/etc/apache2/sites-available/monsite.conf:
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/html
# Redirection HTTP vers HTTPS
Redirect "/" "https://example.com/"
</VirtualHost>
<VirtualHost *:443>
ServerName example.com
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /etc/ssl/certs/example.com.crt
SSLCertificateKeyFile /etc/ssl/private/example.com.key
# SSLCertificateChainFile /etc/ssl/certs/chain.pem (optionnel)
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
- Activer SSL et le site puis recharger Apache :
a2enmod ssl
a2ensite monsite.conf
systemctl reload apache2
Nginx¶
- Installation (Debian/Ubuntu) :
apt update
apt install nginx
- Configuration minimale d’un serveur avec SSL
Fichier exemple
/etc/nginx/sites-available/monsite:
server {
listen 80;
server_name example.com;
# Redirection HTTP vers HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/ssl/certs/example.com.crt;
ssl_certificate_key /etc/ssl/private/example.com.key;
# ssl_trusted_certificate /etc/ssl/certs/chain.pem; (optionnel)
root /var/www/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
- Activer le site et recharger Nginx :
ln -s /etc/nginx/sites-available/monsite /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx
Tomcat¶
- Installation (Debian/Ubuntu) :
apt update
apt install tomcat9
- Activer SSL dans Tomcat
Modifier le fichier :
/etc/tomcat9/server.xml
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="/etc/ssl/private/keystore.p12"
keystorePass="changeit"
keystoreType="PKCS12" />
- Créer un keystore PKCS12 à partir d’un certificat et d’une clé privée :
openssl pkcs12 -export \
-in /etc/ssl/certs/example.com.crt \
-inkey /etc/ssl/private/example.com.key \
-certfile /etc/ssl/certs/chain.pem \
-out /etc/ssl/private/keystore.p12
⚠️ Le mot de passe du keystore doit correspondre Ă
keystorePassdansserver.xml.
- Redémarrer Tomcat :
systemctl restart tomcat9
HAProxy¶
- Installation (Debian/Ubuntu) :
apt update
apt install haproxy
- Créer un certificat combiné (clé + CRT + CA) :
cat /etc/ssl/private/example.com.key \
/etc/ssl/certs/example.com.crt \
/etc/ssl/certs/chain.pem > /etc/ssl/private/example.com.pem
- Exemple de configuration SSL minimaliste
Fichier
/etc/haproxy/haproxy.cfg:
frontend https_front
bind *:443 ssl crt /etc/ssl/private/example.com.pem
mode http
default_backend web_servers
frontend http_front
bind *:80
redirect scheme https code 301 if !{ ssl_fc }
backend web_servers
mode http
server web1 127.0.0.1:8080 check
- Redémarrer HAProxy :
systemctl restart haproxy
Emplacements typiques des certificats SSL¶
| Type | Emplacement habituel |
|---|---|
Certificat combiné .pem |
/etc/ssl/private/example.com.pem (HAProxy) |
| Keystore PKCS12 | /etc/ssl/private/keystore.p12 (Tomcat) |
Clé privée .key |
/etc/ssl/private/example.com.key |
Certificat .crt |
/etc/ssl/certs/example.com.crt |
| CA Intermédiaire | /etc/ssl/certs/chain.pem |
Sécurisez tous les fichiers privés avec
chmod 600.
Commandes utiles Web¶
- Supprimer une injection de hack dans plusieurs fichiers :
for i in `grep <HACK> * -rl`; do
sed -i -e 's/eval(base64_decode(\\"<HACK>=\\"))\\;//g' $i;
echo $i;
done
- Exemple pour un hack précis :
for i in `grep DQplcnJvcl9yZXBvcnRpbmcoMCk7DQokcWF6cGxtPWhlYWRlcnNfc2VudCgpOw0KaWYgKCEkcWF6cGxtK * -rl`; do
sed -i -e 's/eval(base64_decode(\\"DQplcnJvcl9yZXBvcnRpbmcoMCk7DQokcWF6cGxtPWhlYWRlcnNfc2VudCgpOw0KaWYgKCEkcWF6cGxtKXsNCiRyZWZlcmVyPSRfU0VSVkVSWydIVFRQX1JFRkVSRVInXT0=\\"))\\;//g' $i;
echo $i;
done
- Lister et trier les IPs de connexion par fréquence :
awk '{print $1}' <CHEMIN-LOG> | sort -n | uniq -c | sort -rnk1,
Notes¶
- Remplacez
example.compar votre nom de domaine. - Pour un certificat SSL gratuit et automatisé, utilisez Let's Encrypt.
- Les commandes OpenSSL ci-dessus vous aideront à diagnostiquer et gérer vos certificats.