Outils pour utilisateurs

Outils du site


tech:signer_des_fichiers

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
tech:signer_des_fichiers [2025/11/11 16:16] Jean-Baptistetech:signer_des_fichiers [2026/06/07 19:12] (Version actuelle) – modification externe 127.0.0.1
Ligne 1: Ligne 1:
 +<!DOCTYPE markdown>
 +{{tag>Brouillon Securité OpenSSL Crypto Sign Bash CA}}
 +
 +# Signer des fichiers
 +
 +Voir 
 +* [[sign_signify-openbsd|signify-openbsd]] 
 +* [minisign](https://jedisct1.github.io/minisign/)
 +
 +## Avec ssh_keygen
 +
 +## Avec OpenSSL
 +
 +
 +### Création de la paire de clefs
 +
 +Génération de la clef privé
 +~~~bash
 +openssl genrsa -out priv.pem 4096
 +~~~
 +
 +Génération de la clef public
 +~~~bash
 +openssl rsa -in priv.pem -pubout -out public.pem
 +~~~
 +
 +
 +### Signer 
 +
 +~~~bash
 +openssl dgst -sha256 -sign priv.pem -out plop.txt.sha256 plop.txt
 +openssl base64 -in plop.txt.sha256 -out /tmp/plop.txt.sign
 +~~~
 +
 +
 +### Vérifier la signature
 +
 +~~~bash
 +openssl base64 -d -in plop.txt.sign -out /tmp/plop.txt.sha256
 +openssl dgst -sha256 -verify public.pem -signature plop.txt.sha256 plop.txt
 +~~~
 +
 +
 +## Exemple de script pour signer
 +
 +Ce script crée un fichier contenant une date
 +Ce fichier date est signé
 +
 +La signature est vérifiée
 +Un délais est défini au delà duquel il est considéré comme expiré.
 +
 +`poc_crypto_sign.sh`
 +~~~bash
 +#! /bin/bash
 +
 +set -o nounset
 +
 +DELAY=60
 +
 +KEY_PRIV=priv.pem
 +KEY_PUB=public.pem
 +SIGN_FILE=plop.txt.sign
 +TMP_SIGN_FILE=/tmp/plop.txt.sha256
 +DATA_FILE=plop.txt
 +
 +enc_create_key_priv() {
 +        openssl genrsa -out "$KEY_PRIV" 4096
 +}
 +
 +enc_create_key_pub() {
 +        openssl rsa -in "$KEY_PRIV" -pubout -out "$KEY_PUB"
 +}
 +
 +enc_sign() {
 +        openssl dgst -sha256 -sign "$KEY_PRIV" -out "$TMP_SIGN_FILE" "$DATA_FILE"
 +        openssl base64 -in "$TMP_SIGN_FILE" -out "$SIGN_FILE"
 +}
 +
 +err() {
 +        local err_code=$1
 +        shift
 +        echo $* >&2
 +        exit $err_code
 +}
 +
 +enc_verif_sign() {
 +        openssl base64 -d -in "$SIGN_FILE" -out "$TMP_SIGN_FILE"
 +        openssl dgst -sha256 -verify "$KEY_PUB" -signature "$TMP_SIGN_FILE" "$DATA_FILE" > /dev/null
 +        if [ $? -ne 0 ]
 +        then
 +                err 1 "Error. Sign. Verification Failure"
 +        fi
 +}
 +
 +date_epoch() {
 +        echo $(date +%s)
 +}
 +
 +read_date_file() {
 +        echo "$(cat $DATA_FILE)"
 +}
 +
 +create_date_file() {
 +        date_epoch > "$DATA_FILE"
 +        enc_sign
 +}
 +
 +check_date() {
 +        enc_verif_sign
 +        local -i epoch_file="$(read_date_file)"
 +        local -i epoch_now="$(date_epoch)"
 +        echo "DEBUG: $epoch_file > $(( epoch_now - DELAY ))"
 +        if (( epoch_file > epoch_now ))
 +        then
 +                err 2 "Error. Time in futur"
 +        elif (( $epoch_file < $(( epoch_now - DELAY )) ))
 +        then
 +                err 3 "Error. Expired"
 +        else
 +                echo "OK"
 +        fi
 +}
 +
 +#enc_create_key_priv
 +#enc_create_key_pub
 +#create_date_file
 +#enc_sign
 +
 +enc_verif_sign
 +read_date_file
 +check_date
 +~~~
 +
  

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki