# [Script]Générateur de certifcat SSL

## niolou

Bonjour à tous voila je me permet de vous présenter un petit script de ma confection  :Smile:  Je suis d'ailleurs ouvert à toute les propositions sur les parties manquantes, incompletes ou celle qui n'ont pas trouvé de solution dans mon petit cerveau.

```

# This Script is under GNU license (www.gnu.org). Vous pouvez modifer ce script selon les termes de la license GNU. Script modifié le 26 02 2005 dans le but de permettre le choix des algorithme de cryptage.Fait par NiolyEoFWooD (Alexandre VERNIOL).

#

#A FAIRE : 

#-Trouver l'emplacement de apache.conf ainsi que de proftpd.conf afin de pouvoir intégrer directement les certif générés. Voir ligne 179

# !/bin/bash

nom_de_clef="$1"

while [ -z "$nom_de_clef" ]

do

   read -p "Entrer un nom pour la clef SSL : " nom_de_clef

done

echo

echo "La clef se nommera : $nom_de_clef "

echo 

while [ -z "$puissance" ]

do

   read -p "Entrer le nombre de bits de codage :" puissance

done 

if [ $puissance -gt 4096 ]

then

read -p "Attention la création de la clef peut prendre quelques instants êtes-vous sur de vouloir continuer [o/n] : " reponse

   

   case $reponse in

   [oO]) 

   continue

   ;;   

   [nN])

   exit 1

   ;;

   esac

fi

while [ -z "$algo" ]

do 

read -p "Quel algorithme souhaitez-vous utiliser ? (GENRSA ou GENDSA)" algo

   

   case $algo in

   [genrsaGENRSA]*)

   echo

   echo "Utilisation de RSA"

   echo

   ;;

   [gendsaGENDSA]*)

   echo

   echo "Utilisation de DSA"

   echo

   ;;   

   *)

   echo 

   echo "Merci de choisir RSA ou DSA"

   echo 

   ;;

   esac

done   

while [ -z "$type_algo" ]

do

read -p "Choix du type d'algorithme utilisé : (des, des3, aes128, aes192, aes256)" type_algo

   case $type_algo in

   [desDES]*)

   echo

   echo "Le type d'algorithme sera DES"

   echo

   ;;

   [des3DES3]*)

   echo

   echo "Le type d'algorithme sera DES3"

   echo

   ;;

   [aes128AES128]*)

   echo

   echo "Le type d'algorithme sera AES128"

   echo

   ;;

   [aes192AES192]*)

   echo

   echo "Le type d'algorithme sera AES192"

   echo

   ;;

   [aes256AES256]*)

   echo

   echo "Le type d'algorithme sera AES256"

   echo

   ;;

   esac

done

   

echo 

echo "Génération de la clef " $nom_de_clef "avec une puissance de" $puissance "avec l'algorithme" $algo "et le type d'algorithme" $type_algo

echo

openssl $algo -"$type_algo" -out "$nom_de_clef.key" $puissance

# openssl genrsa -des3 -out "$nom_de_clef.key" $puissance

echo

read -p "Souhaitez-vous retirez le mot de passe de la clef (permet le lancement d'Apache sans intervention humaine par exemple) [o/n] :" reponse2

   case $reponse2 in

   [oO]*)

   echo "Retrait du mot de passe dans la clef" $nom_de_clef

   openssl rsa -in "$nom_de_clef.key" -out "$nom_de_clef.key.ssmdp"

   mv "$nom_de_clef.key.ssmdp" "$nom_de_clef.key"

   echo "Mot de passe retiré"

   ;;

   [nN]*)

   continue

   ;;

   esac

   

echo "Information sur la clef : "

openssl rsa -noout -text -in "$nom_de_clef.key"

echo

echo

echo "Creation de certifcat :"

openssl req -new -key "$nom_de_clef.key" -out "$nom_de_clef.key.csr"

echo

echo "Informations :"

openssl req -noout -text -in "$nom_de_clef.key.csr"

echo

echo "Certificat X.509 autosigné de l'autorité de certification (CA)"

echo

while [ -z $jour ]

do

   read -p "Nombre de jour de validité du certificat :" jour

done

echo "Le certificat aura une validité de:" $jour

echo 

openssl x509 -req -days $jour -in "$nom_de_clef.key.csr" -signkey "$nom_de_clef.key" -out "$nom_de_clef.cert"

echo 

echo

read -p "Souhaitez-vous intégrer ces certificats dans Apache ? [o/n]" reponse3

   case $reponse3 in

   

   [oO]*)

   # Il reste a trouver une solution afin de pouvoir determiner l'emplacement du fichier .conf d'apache locate peut etre la solution 

   echo "Insertion du certificats, de la clef etc ... "

   echo "SSLCertificateFile" $PWD/$nom_de_clef.cert >> blabla

   echo "SSLCertificateKeyFile" $PWD/$nom_de_clef.key >> blabla

   echo "SSLCertificateChainFile" $PWD/$nom_de_clef.key.csr >> blabla

   echo

   echo "Intégration terminé"

   echo

   ;;

   [nN]*)

   echo "Bonne journée" $USER

   echo

   exit 1

   ;;

   esac

echo

# intégration à proftpd basique ne permet ni la selection de l'algo ni sa puissance ni son nom dernier modif du 26/02/05

read -p "Souhaitez-vous sécurisez Proftpd (simpliste) ? [o/n]" reponse4

   case $reponse4 in

   

   [oO]*)

   echo

   echo "Création de la clef privé RSA"

   openssl genrsa 1024 > host.key && chmod 400 host.key

   echo

   echo "Création du certificat public"

   openssl req -new -x509 -nodes -sha1 -days 365 -key host.key > host.cert

   echo

   echo "Création du .pem utile à proftpd"

   cat host.cert host.key > host.pem && chmod 400 host.pem

   echo

   

   read -p "Souhaitez-vous modifier que je modifie votre proftpd.conf ? [o/n]" modif

      case $modif in

      [oO]*)

      echo

      echo "Modification de /etc/proftpd/proftpd.conf"

      echo "TLSEngine                       on

            TLSLog                          /var/log/proftpd/proftpdtls.log

            TLSRequired                     off

            TLSOptions                      NoCertRequest

            TLSVerifyClient                 off

            TLSProtocol                     TLSv1

            TLSProtocol                     SSLv23

            TLSRSACertificateFile       "$PWD/"host.cert

            TLSRSACertificateKeyFile       "$PWD/"host.key

            TLSRSACertificateFile              "$PWD/"host.pem" >> /etc/proftpd.conf

      echo

      ;;

      [nN]*)

      echo

      echo "Bonne journée" $USER

      exit 1

      ;;

      esac

   ;;

   [nN]*)

   echo

   echo "Bonne journée" $USER

   ;;

   esac

```

[EDIT] Je serais également ravis d'avoir votre avis ce celui-ci (utilité, fonctionnalité ... )[/EDIT]

----------

## broly

Déjà tu peux faire un test sur l'emplacement par defaut voir si les fichiers existent, puis apres faire un test pour voir si locate existe puis voir si une entrée ds la crontab existe afin de s'assurer qu'il ai eu le maximum de chance que ca a deja tourné puis pour finir faire un locate de tes fichiers.

sinon en ce qui concerne l'utilité si toi tu en a besoin c'est deja ca ...

----------

## spider312

Je pense que ton script est pas mal, mais pas très didactique, quelqu'un qui a besoin de ce script est quelqu'un (comme moi) qui ne comprends rien à SSLt a juste envie de générer un certificat, dans ce cas, je ne suis pas sur que le script suffise (enfin j'essayerais quand même  :Razz: )

Il doit surtout être utile pour quelqu'un qui génère 50 certificats par jour, mais à ce que j'ai compris des certificats, ça ne doi pas arriver bien souvent

En parlant de ça, tu n'aurais pas une doc simple concernant les certificats ? puisqu'à priori, le plus dur n'est pas de les générer mais de comprendre comment ils marchent et à quoi ils servent

----------

## spider312

ouais c'est pire que ce que je pensais  :Laughing: 

Donc petite remarque sur la forme : le #!/bin/bash ne devrait-il pas être sur la première ligne ?

Et puis sur le fond : il pose vraiment des questions de malade, faut maitriser le sujet avant de lancer ce script, ce qui diminue son interet

Et pour finir, j'ai pleins d'erreurs, et bien sur ça ne marche pas (enfin j'ai un peu répondu au pif pour voir ce que ça allait donner aussi), ça commence comme ça : 

```
Génération de la clef  columbia avec une puissance de 128 avec l'algorithme GENRSA et le type 

d'algorithme des

openssl:Error: 'GENRSA' is an invalid command.
```

----------

## Pachacamac

Il me semble que l'on peux donner directement à openssl les fichiers dans lesquels il va chercher ses infos.

Je ne l'ai pas utilisé depuis longtemps alors peut être que ma mémoire me joue des tours.

----------

## niolou

 *spider312 wrote:*   

> ouais c'est pire que ce que je pensais 
> 
> Donc petite remarque sur la forme : le #!/bin/bash ne devrait-il pas être sur la première ligne ?
> 
> Et puis sur le fond : il pose vraiment des questions de malade, faut maitriser le sujet avant de lancer ce script, ce qui diminue son interet
> ...

 

genrsa en miniscule c'est unerreur de ma part de l'avoir mis en majuscule  :Embarassed: 

De plus il est vrai que certaine question son plutot tres orienté je pense le modifie ds les prochaines minutes afin qu'il soit plus accessible. De plus il est possible que celui-ci soit bogué avec certain cypher (des3, des aes256 etc ... ) Donc je corrige tt ca et je repost ca ds les plus bref delais ...

----------

