Générer une paire de clé RSA avec openSSL

Pour générer la clé privé, on utilise l’action genrsa de openssl (voir le man genrsa pour plus de détails), la taille de la clé privée ici est de 2048 bits ce qui assure une niveau de sécurité acceptable pour des utilisations civiles (authentification, signature…) :

openssl genrsa -aes256 2018 >private.pem

Ensuite pour extraire la clé publique de la clé privé, on utilise l’action rsa (voir le man rsa pour plus de détail) :

openssl rsa -in private.pem -pubout > public.pem

Ajouter un certificat de serveur dans AWS IAM

La console IAM ne permet pas de gérer les certificats de serveur qui ont été insérés à la volée dans IAM via l’ELB. Il faut donc passer par l’API :

(une fois les pré-requis de l’API installés), exécutez:

aws iam upload-server-certificate --server-certificate-name mon.serveur.com.2017 --certificate-body file:///home/cve/ssl/serveur_crt.pem --certificate-chain file:///home/cve/ssl/cert_chain.pem --private-key file:///home/cve/ssl/serveur_key.pem

Ensuite vous retrouvez votre nouveau certificat dans la liste des certificats IAM sur la page de mise à jour du certificat de l’ELB.

How to setup 2 virtual hosts with different wildcard SSL certificates on the same apache

  • you need one dedicated IP per wildcard certificate in order to let apache route the request to the correct certificate.
  • use the NameVirtualHost option to indicate that two IPs will resolve the nameVirtualHost instead of using the classic *:443 value.: A.A.A.A:443 and B.B.B.B:443
  • setup each virtual host with the dedicated IP instead of *:443. and define the SSL certificate as usual.
  • all virtuals hosts that are under certificate A must use the IP A.A.A.A:443 and the others virtual host must use the IP B.B.B.B:443

Compiler redmine 1.9.3 puis installer redmine sur apache le tout sur une debian squeeze…

évidemment ruby 1.9.3 n’est pas encore disponible en paquet debian squeeze donc on compile, on installe et hop…

Comme d’habitude vérifier la présence de:

  • g++
  • libc
  • libtool
  • autoconf
  • openssl dev
  • fcgi dev
telecharger les sources de ruby
lancer autoconf
.configure 
make
(regarder les messages d'erreur sur la creation des config) openssl doit passer si vous voulez l'utiliser (si il ne passe pas c'est qu'il manque la lib. Retournez dans aptitude)
make install

Installer les paquets connexe via gem

gem install rails
gem install fcgi
gem install rack

Descendre les sources redmine suivre la doc redmine

Ajouter la dependance sur fcgi dans Gemfile supprimer le fichier Gemfile.lock relancer le bundle install:

bundle install --without development test postgresql sqlite rmagick

Installer passenger via gem:

gem install passenger

Compiler passenger pour apache:

passenger-install-apache2-module

Ajouter dans le module passenger dans /etc/site-available (copier/coller les lignes fournit en fin de compilation du passenger)

Ensuite creer le virtual host en pointant sur l’appli ruby.

<VirtualHost *:443>
 ServerName www.domain.com
 DocumentRoot /opt/redmine/current/public
 <Directory /opt/redmine/current/public>
       AllowOverride all
       Options -MultiViews
       </Directory>
       ErrorLog /var/log/apache2/redmine_error.log
       LogLevel error
       CustomLog /var/log/apache2/redmine_cust.log combined
       SSLEngine on
       SSLCertificateFile    /etc/ssl/certs/openways.com.crt
       SSLCertificateKeyFile /etc/ssl/private/openways.com.key
       SSLCertificateChainFile /etc/ssl/certs/gd_bundle.crt
</VirtualHost>

lancement d’apache sans prompt avec une clé privé avec passphrase

Apache embarque une directive qui permet de lancer une commande. Voici la’ doc avec exemple simpliste:
[utilisation de sslpassphrasedialog|http://httpd.apache.org/docs/2.2/mod/mod_ssl.html#sslpassphrasedialog|en]

Attention la’ directive doit se trouver dans le root context (hors du virtual host) donc pour gérer du multi host il faut faire un script qui parse les args reçus.

Créer un keystore BKS pour Android et inclure un CA proprietaire

creer le keystore BKS
keytool -genkeypair -v -alias app_zzz -keyalg RSA -keysize 1024 -dname "CN=zzz, OU=zzz, O=zzz, L=zzz,S=00, C=FR" -validity 3600 -keypass zzz -keystore zzz.bks -storepass zzz -storetype BKS -providerclass org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath C:\Users\zzz\BouncyCastle\bcprov-jdk16-146.jar
importer le CA
keytool -importcert -trustcacerts -alias CA_zzz -file CA_zzz.crt -keypass zzz -keystore zzz.bks -storepass zzzz -storetype BKS -providerclass org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath C:\Users\zzz\BouncyCastle\bcprov-jdk16-146.jar
verifier le keystore
keytool -list -keypass zzz -keystore zzz.bks -storepass zzz -storetype BKS -providerclass org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath C:\Users\zzz\BouncyCastle\bcprov-jdk16-146.jar

ps : Cet exemple se base sur le keytool de la jdk 1.6 (les options sont un peu différentes sur la jdk 1.5)

x509 avec openssl

! Créer un ca de test

$ openssl req -x509 -newkey rsa:2048 -keyout’ ca.key -out ca.crt

! Créer la clé privé du serveur (ici RSA)

$ openssl genrsa -out client.key 2048

! Créer la csr du serveur
$ openssl req’ -new -key client.key -out client.csr

! Signer la csr :

$ openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in client.csr -out’ client.crt

Le fichier client.crt est signé par le ca, that’s it !

cf le man openssl pour plus d’info

Mémo sur la gestion/signature de clés RSA depuis un keystore java

créer la clé privée du ca et le certificat autosigné du ca
 openssl req -x509 -newkey rsa:1024 -keyout ca.key -out ca.crt
créer la paire de clé du user
 $JAVA_HOME/bin/keytool -genkey -alias "Chrystophe Vergnaud" -keyalg RSA -dname "CN=Chrystophe Vergnaud, OU=ICI, O=MY_HOME, L=HOME,S=31, C=FR" -storepass "change_moi" -keypass "un_truc_secret" -keystore cve.jks -storetype jks
faire la demande de certif du user
 ${JAVA_HOME}/bin/keytool -certreq -file cve.csr -storepass "change_moi" -alias "Chrystophe Vergnaud" -keystore cve.jks -storetype jks
signer la demande
 openssl x509 -req -days 1200 -in cve.csr -CA ../ca/ca.crt -CAkey ../ca/ca.key -CAcreateserial -out cve.crt
importer le certificat du CA dans le kstore
 ${JAVA_HOME}/bin/keytool -importcert -trustcacerts -alias "mon_ca" -file ../ca/ca.crt -keystore cve.jks -storepass "change_moi" -storetype jks
 repondre oui a la question
importer le certificat signé dans le kstore
 ${JAVA_HOME}/bin/keytool -importcert -alias "Chrystophe Vergnaud" -file cve.crt -keystore cve.jks -storepass "change_moi" -storetype jks
afficher le contenu du keystore
 ${JAVA_HOME}/bin/keytool -list -v -keystore cve.jks -storepass "change_moi" -storetype jks
exporter en pkcs12
 keytool -importkeystore -srckeystore cve.jks -destkeystore cve.p12 -srcstoretype JKS -deststoretype PKCS12 -srcstorepass "change_moi" -deststorepass "change_moi_mieux"

ps : l’option storepass est à éviter en production mais en phase de test elle évite de choper une crampe.