Certificat SSL auto-signé pour HTTPS avec OwnCloud et DAVdroid / CAdroid

J’ai un serveur Owncloud qui me sert pour synchroniser d’une part mon Thunderbird et d’autre part mon téléphone (contacts + agenda). Pour éviter de laisser circuler les mots de passe en clair sur le réseau, je mets du HTTPS avec un certificat SSL auto-signé (en attendant de jouer sérieusement avec Let’s Encrypt).

Générer un certificat auto-signé SSL

Une recette simple reprise chez Akadia pour faire un certificat auto-signé :

Depuis le serveur :

openssl genrsa -des3 -out server.key 2048
openssl req -new -key server.key -out server.csr
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Il faudra saisir une passphrase qui sera supprimée en ligne 4, et aussi quelques informations dont la plus importante est le Common Name, à savoir le nom du domaine sur lequel on veut mettre du HTTPS.

Une fois ce certificat installé (détails donnés chez Akadia), il ne reste plus qu’à l’importer dans le smartphone à l’aide de CAdroid, pour pouvoir ensuite configurer DAVdroid.

Or le certificat généré avec les commandes ci-dessus n’est pas importé par CAdroid, l’erreur affichée étant la suivante :

Copie d'écran message d'erreur CAdroid
Message d’erreur CAdroid : There’s no CA flag=TRUE in this certificate

Pistes à creuser

Rien trouvé par là.

Solution trouvée

Les instructions d’Akadia sont globalement bonnes mais incomplètes. Je les reprends et ajoute ce qu’il manquait.

Étape 1

Générer la clé RSA en 2048, générer le « CSR » et lui enlever la passphrase :

openssl genrsa -des3 -out server.key 2048
openssl req -new -key server.key -out server.csr
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key

Étape 2

Pour ajouter le flag CA:true, il faut créer un fichier, disons openssl.cnf avec comme contenu :

basicConstraints=CA:TRUE

Étape 3

Puis générer le certificat :

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt -extfile openssl.cnf

Et le tour est joué, CAdroid accepte d’importer le certificat.