OpenSSL est une boîte à outils de chiffrement comportant deux bibliothèques et une interface en ligne de commande1).
Ce genre de certificat doit être seulement utilisé pour le développement ou pour des tests, jamais pour des environnements de production.
Voir si OpenSSL est installé:
$ which openssl /usr/bin/openssl
Créer le certificat:
$ openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365
cd; mkdir .ssl openssl req -newkey rsa:2048 -x509 -nodes -keyout .ssl/localhost.key -new -out .ssl/localhost.crt -subj /CN=localhost -reqexts SAN -extensions SAN -config <(cat /System/Library/OpenSSL/openssl.cnf <(printf '[SAN]\nsubjectAltName=DNS:localhost')) -sha256 -days 3650 sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain .ssl/localhost.crt
Installer et démarrer un serveur:
npm install http-server -g
http-server --ssl --cert ~/.ssl/localhost.crt --key ~/.ssl/localhost.key -a localhost -o
Source : https://localhost
$ openssl rsa -in key.pem -out newkey.pem && mv newkey.pem key.pem
Si on suppose avoir créé un certificat auto-signé, comme ci-haut, on peut générer un fichier PFX avec cette commande :
$ openssl pkcs12 -export -out certificate.pfx -inkey key.pem -in cert.pem
OpenSSL est peut-être à une vieille version sur Ubuntu (1.0.1f sur 14.04 et 1.0.2g sur 16.04). La méthode apt-get upgrade openssl
ne fonctionne pas, on aura 0 paquet de mis à jour.
Sur le site https://openssl.org voir quel paquetage tar
est présent. Au moment d'écrire ces lignes il s'agissait de https://www.openssl.org/source/openssl-1.0.2l.tar.gz
. Modifier l'URL en conséquence selon la version courante d'OpenSSL.
$ curl https://www.openssl.org/source/openssl-1.0.2l.tar.gz | tar xz $ cd openssl-1.0.2l $ sudo ./config $ sudo make $ sudo make install
Remplacer l'ancien exécutable d'OpenSSL par le nouveau avec un lien symbolique:
$ sudo ln -sf /usr/local/ssl/bin/openssl `which openssl`
Source : apt-get upgrade openssl won't bring Ubuntu 12.04 to latest version
Ces instructions sont pour générer un CSR pour un certificat SSL wildcard, par exemple *.mydomain.com
.
Il faut d'abord générer une clé .key
(ou .pem
) :
openssl genrsa –des3 –out mydomain.com.key 2048
Ensuite, il faut générer le fichier CSR. Dans Common name, il faut mettre une étoile (*
) pour le sous-domaine du domaine, exemple *.mydomain.com
.
openssl req –new –key mydomain.com.key –out mydomain.com.csr
Sur le client, faire:
$ nano ~/.ssh/config
Entrer la ligne suivante:
VisualHostKey=yes
On peut aussi utiliser l'option dans ssh
:
$ ssh user@host -o VisualHostKey=yes
Si les certificats d'autorité (CA) ne sont pas disponibles sur le système, dans ces endroits:
/etc/ssl/certs
/usr/share/ca-certificates/mozilla
on peut les installer en faisant:
$ update-ca-certificates
Si la commande n'est pas disponible, installer le package ca-certificates
:
$ sudo apt-get install ca-certificates
Cette opération a été utilisée avec Vault.
Générer le certificat racine:
$ openssl req -newkey rsa:2048 -days 3650 -x509 -nodes -out root.crt
Générer la requête de certificat (CSR) et la clé privée:
$ openssl req -newkey rsa:2048 -nodes -out vault.csr -keyout vault.key
Créer des fichiers qui seront utilisés pour la génération du certificat:
$ echo 000a > serialfile $ touch certindex
Créer un fichier vault-ca.conf
avec le code suivant et en adaptant les chemins pour les fichiers root.crt
, certindex
, privkey.key
et serialfile
.
[ ca ] default_ca = myca [ myca ] new_certs_dir = /tmp unique_subject = no certificate = /path/to/root.crt database = /path/to/certindex private_key = /path/to/privkey.key serial = /path/to/serialfile default_days = 365 default_md = sha256 policy = myca_policy x509_extensions = myca_extensions copy_extensions = copy [ myca_policy ] commonName = supplied stateOrProvinceName = supplied countryName = supplied emailAddress = optional organizationName = supplied organizationalUnitName = optional [ myca_extensions ] basicConstraints = CA:false subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always subjectAltName = IP:127.0.0.1 keyUsage = digitalSignature,keyEncipherment extendedKeyUsage = serverAuth
Générer le certificat :
$ openssl ca -batch -config vault-ca.conf -notext -in vault.csr -out vault.crt
Copier le certificat racine root.crt
dans le répertoire /usr/local/share/ca-certificates
et faire une mise à jour des CA:
$ sudo update-ca-certificates