openssl req -newkey rsa:2048 -subj /CN=example.com -nodes -keyout example.com.key -out example.com.csr
ou
CN="domain.tld" FILE=cert-domain.tld openssl req -newkey rsa:2048 -subj /CN=$CN -nodes -keyout $FILE.key -out $FILE.csr
CN="domain.tld" FILE=cert-domain.tld STATE=My State VILLE=My City PAYS=FR ORGA=My Company ORGA_UNIT=My Unit openssl req -new -newkey rsa:2048 -nodes -out $FILE.csr -keyout $FILE.key -subj "/C=$PAYS/ST=$STATE/L=$VILLE/O=$ORGA/OU=$ORGA_UNIT/CN=$CN"
openssl req -noout -text -in example.com.csr
Pour un certificat multi-domaine, c'est à dire incluant l’extension subjectAltName permetant la validité du certificat pour un nom de domaine principale ainsi que un ou plusieurs nom de domaine alternatif, voilà comment procéder :
cp /etc/ssl/openssl.cnf /etc/ssl/private/openssl-domaine.tld.cnf
[req]
ajouter : req_extensions = v3_req
[v3_req]
ajouter : subjectAltName = @alt_names
[alt_names] DNS.1 = alt1.domain.tld DNS.2 = alt2.domain.tld DNS.3 = alt3.domain.tld
Certificate Request: Data: Version: 0 (0x0) Subject: C=FR, CN=domain.tld Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: [...] Exponent: 65537 (0x10001) Attributes: Requested Extensions: X509v3 Basic Constraints: CA:FALSE X509v3 Key Usage: Digital Signature, Non Repudiation, Key Encipherment X509v3 Subject Alternative Name: DNS:alt1.domain.tld, DNS:alt3.domain.tld, DNS:alt3.domain.tld Signature Algorithm: sha1WithRSAEncryption [...]
openssl rsa -noout -modulus -in server.key |openssl md5
openssl req -noout -modulus -in server.csr |openssl md5
openssl x509 -noout -modulus -in server.crt |openssl md5
Pour faciliter la suite, déclarons une variable d'environnement pour le nom de domaine pour lequel nous devons générer ce certificat :
export FQDN=test.example.com
Générerons ensuite la clé RSA :
openssl genrsa -out /etc/ssl/private/${FQDN}.key 4096 chown root:ssl-cert /etc/ssl/private/${FQDN}.key chmod 640 /etc/ssl/private/${FQDN}.key
Générons ensuite le certificat autosigné :
openssl req -new -x509 -days 3650 -key /etc/ssl/private/${FQDN}.key -out /etc/ssl/certs/${FQDN}.crt chmod 644 /etc/ssl/certs/${FQDN}.crt
Dans les questions posées, il faut faire attention au champ Common Name (eg, YOUR name) : Il faut mettre le nom du serveur (FQDN).
Paramètres :
-x509
: génération d'un certificat auto-signé, et non d'une CSR-days 3650
: le certificat sera valable 3650 joursPour un CRT :
openssl x509 -noout -text -in server.pem
Pour un CSR :
openssl req -noout -text -in server.csr
Pour un P12 : le convertir en PEM d'abord (cf. plus bas)
openssl pkcs12 -out file-out.pem -in file-in.p12
openssl pkcs12 -in server.pfx -nocerts -nodes -out server.key
openssl pkcs12 -in server.pfx -clcerts -nokeys -out server.crt
-legacy
aux commandes openssl: 4037E9E48B7F0000:error:0308010C:digital envelope routines:inner_evp_generic_fetch:unsupported:../crypto/evp/evp_fetch.c:373:Global default library context, Algorithm (RC2-40-CBC : 0), Properties ()
Après avoir généré un certificat SSL (cf. methode) :
Créer le fichier /etc/apache2/conf-available/ssl.conf :
<IfModule mod_ssl.c> SSLCertificateFile /etc/ssl/certs/server.crt SSLCertificateKeyFile /etc/ssl/private/server.key </IfModule>
ou avec un seul fichier contenant la clé et le certificat :
<IfModule mod_ssl.c> SSLCertificateKeyFile /etc/ssl/private/server.pem </IfModule>
cat /etc/ssl/private/server.key /etc/ssl/certs/server.crt > /etc/ssl/private/server.pem
Puis activer ce fichier de configuration :
a2enconf ssl service apache2 restart
SSLCertificateChainFile cachaine.txt
a2enmod ssl
Dans le fichier de définition du VirtualHost :
<VirtualHost *:443> ... SSLEngine On ... </VirtualHost>
openldap
au groupe ssl-cert
: adduser openldap ssl-cert
service openldap restart
cat /etc/ssl/private/ldap.crt /etc/ssl/private/ldap-chain.crt > /etc/ssl/private/ldap-fullchain.crt
chown root:ssl-cert /etc/ssl/private/ldap-fullchain.crt /etc/ssl/private/ldap.key chmod 644 /etc/ssl/private/ldap-fullchain.crt /etc/ssl/private/ldap-chain.crt /etc/ssl/private/ldap.crt chmod 640 /etc/ssl/private/ldap.key
olcTLSCertificateFile
& olcTLSCertificateKeyFile
de l'objet cn=config
de la configuration d'OpenLDAP : ldapmodify -Y EXTERNAL -H ldapi:/// << EOF dn: cn=config changetype: modify add: olcTLSCertificateFile olcTLSCertificateFile: /etc/ssl/private/ldap-fullchain.crt - add: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/ssl/private/ldap.key EOF * Ajouter ''ldaps:///'' à la variable ''SLAPD_SERVICES'' dans le fichier ''/etc/default/slapd'' * Redémarrer OpenLDAP : <code bash>service openldap restart
Script :
#!/bin/bash # OpenSSL requires the port number. SERVER=$1 [ -z "$SERVER" -o "$SERVER" == "-h" ] && echo "Usage : $0 [server:port]" && exit 0 echo -n "Obtaining cipher list from local $(openssl version)..." ciphers=$(openssl ciphers 'ALL:eNULL' | sed -e 's/:/ /g') echo "Check cipher support on server $SERVER :" for cipher in ${ciphers[@]} do echo -n Testing $cipher... result=$(echo -n | openssl s_client -cipher "$cipher" -connect $SERVER 2>&1) if [[ "$result" =~ ":error:" ]] ; then error=$(echo -n $result | cut -d':' -f6) echo NO \($error\) else if [[ "$result" =~ "Cipher is ${cipher}" || "$result" =~ "Cipher :" ]] ; then echo YES else echo UNKNOWN RESPONSE echo $result fi fi done
Usage :
# Usage : list_cipher [server:port]