Программно проверить сертификат (для обновления) по цепочке и произвольной отметке времени, используя openssl в bash - PullRequest
0 голосов
/ 14 ноября 2018

Мы используем сценарии bash и инструмент командной строки openssl для поддержки нашей внутренней цепочки PKI, это было первое, что пришло в голову при написании сценариев процедур автоматического обновления:

is_cert_valid () {
    # pem cert, pem cert chain, timestamp
    local signed="$1" signer="$2" at_time="$3"
    openssl verify -attime "$at_time" -CAfile "$signer" "$signed"
    return $?
}

Однако код выходадля openssl verify не отражается действительность данного сертификата, но (насколько я понимаю), если команда не смогла выполнить проверку.

Как можно переписать is_cert_valid, чтобы он стал пригодным для использования в операторах bash if?Предполагать, что такое возможно без использования других языков программирования, таких как python или c.

1 Ответ

0 голосов
/ 23 ноября 2018

Этот метод работает для проверки частичных цепей, а синтаксический анализ довольно тривиален.Это также работает для ЦС, просто передайте один и тот же сертификат подписавшему и подписанному.

is_cert_valid () {
    local signer="$1" signed="$2" at_time_offset="$3" output
    if output="$(openssl verify \
                    -CApath /dev/null \
                    -attime "$(( "$at_time_offset" + "$(date +%s)" ))" \
                    -partial_chain \
                    -trusted "$signer" \
                    "$signed" \
            )" && 
        [[ "$output" == "$signed: OK" ]]; then
        return 0
    fi
    return 1
}
...