Назад | Перейти на главную страницу

Внесите сертификат в белый список в openvpn

Чтобы отозвать доступ к клиенту, я могу сделать

$./revoke-full client_name

А затем поместите новый crl.pem на сервере.

Но как мне снова включить этого клиента? Удаление crl.pem файл не является решением, потому что это сломает easy-keys каталог, и я не смогу отозвать их позже.

Сертификаты нельзя отозвать! Вы должны создать новый и передать его клиенту.

... но все же, если хотите:

в папке вашего CA должен быть index.txt с идентификаторами сертификатов в нем. Те, которые начинаются с «V», действительны, а те, что с «R», не принимаются. Вы можете отредактировать этот файл и исправить первый символ на «V» и удалить третий столбец (дату отзыва). Если у вас более одного сертификата, вы должны увидеть шаблон (порядковый номер теперь указан в третьем столбце и т. Д.).

Затем вам просто нужно заново создать CRL, и он должен работать.

Это уродливый хак ... Я все же рекомендую создать новый сертификат для клиента.

Пока отзыв отзыва это не очень хорошая практика, есть особый случай, когда безотзывный ключ (как отменить) может быть полезно.

Худшее: ЭЛТ может никогда быть удалено вместо очень конкретных случаев, таких как учеба. В конце вы можете увидеть, как я удаляю последнюю запись индекса (как отменить действие).

отозвать

Есть немного unrevoke сценарий я написал.

Поскольку это не стандарт функцию, я добавил своего рода файл журнала, который называется unrevoke.txt, в формате ASCII и повторно используя структуру index.txt (разделены табуляцией):

U | Revocation date | Unrevocation date | Id | unknown | Subject

Предупреждение: это работает для моих нужд, но вы должны протестировать их перед регулярным использованием!

#!/bin/bash

# un-revoke a certificate, regenerate CRL,
# and verify revocation status

CRL=crl.pem

if test $# -ne 1; then
    echo "usage: unrevoke <name|idx>";
    exit 1
fi

if test $KEY_DIR; then
    cd $KEY_DIR
    read issuer < <(openssl x509 -issuer -noout -in $KEY_DIR/ca.crt)
    issuer=${issuer#*CN=}
    issuer=${issuer%%/*}
    export KEY_CN=$issuer KEY_OU=$issuer KEY_NAME=$issuer

    if [ -f $1.crt ] ;then
        NAM=$1
    REV=($(sed -ne <index.txt "s/^R\t[^\t]*\t\([0-9]\+Z\)\t\([0-9A-F]\{2,8\}\)\tunknown\t\(.*CN=$1\/.*\)$/\1 \2 \3/p"))
        IDX=${REV[1]}
        SUB="${REV[@]:2}"
    else
        if [ -f $1.pem ] ;then
            IDX=$1
            REV=($(sed -ne <index.txt "s/^R\t[^\t]*\t\([0-9]\+Z\)\t$1\tunknown\t\(.*CN=\([^\/]\+\)\/.*\)$/\1 \3 \2/p"))
            NAM=${REV[1]}
            SUB="${REV[@]:2}"
        fi
    fi
    CRT=$IDX.pem
    if [ -f $CRT ] && [ "$NAM" ] && [ "$IDX" ] ;then
        printf "Key idx: %s, name: %s\n" $IDX $NAM
    else
        echo Key $1 not found.
        exit 1
    fi

    DTE=$(date +"%y%m%d%H%M%SZ")
    # unrevoke key
    sed -e "s/^R\t\([0-9]\+Z\)\t[0-9]\+Z\t$IDX\t/V\t\1\t\t$IDX\t/" -i.old index.txt &&
        printf "U\t%s\t%s\t%s\tunknown\t%s\n" $REV $DTE $IDX "$SUB" >>unrevoke.txt

    # generate a new CRL
    openssl ca -gencrl -out $CRL -config $KEY_CONFIG

    # verify the revocation
    openssl verify -CAfile <(cat ca.crt $CRL) -crl_check $CRT
else
    echo you must define KEY_DIR
fi

удалить последний

Только для информации !!: ключ к НИКОГДА быть удаленным, чтобы разрешить его отзыв!

#!/bin/bash
# For info only!!
# key as to NEVER be deleted
# for making a correct revocation liste
#
# Don't use it unless you're sure you know what you're doing!!!

cd $KEY_DIR || exit 1

mapfile index <index.txt
OIFS="$IFS"
IFS=$'\t'
line=(${index[${#index[@]}-1]})
IFS="$OIFS"
if [ "$line" == "V" ] ;then
    idx=${line[2]}
    nam=${line[4]#*CN=}
else
    idx=${line[3]}
    nam=${line[5]#*CN=}
fi
nam=${nam%%/*}
rm -v $nam.* $idx.*
unset index[${#index[@]}-1]
cat index.txt >index.txt.old 
printf "%s" "${index[@]}" >index.txt
cat serial >serial.old 
echo ${line[2]} >serial