как точно определить сбои внутри al oop, чтобы указать значение c внутри строки - PullRequest
0 голосов
/ 23 января 2020

Как определить сертификат с отсутствующим или неверным значением, если он не соответствует моим требованиям? В идеале, если сертификат запрашивается и ответа не было, я бы хотел, чтобы он напечатал - для соответствующего сертификата, чтобы я мог посмотреть на ошибку.

Я создаю список, содержащий указанные c содержимое файлов сертификатов PEM. Список будет содержать CN или значение электронной почты, использованное в сертификате.

Чтобы получить значение CN, я запускаю:

openssl x509 -noout -subject -in certificate.pem | sed -n '/^subject/s/^.*CN=//p'
example.com

Чтобы получить значение электронной почты, которое я запускаю:

openssl x509 -noout -email -in certificate2.pem
user@example.com 

Я попробовал это, но это не работает, как я думал:

while read common_names; do
openssl x509 -noout -email -in $common_names
    if [[ -z $common_names ]] ; then
        echo ""$common_names" Not valid smime cert"
    fi
done < /user/audit/smime/smime_list.txt > /user/audit/smime/smime_cert_common_name.txt

Содержимое /user/audit/smime/smime_list.txt

/var/certs/example1.com.crt
/var/certs/example2.com.crt
/var/certs/example3.com.crt
/var/certs/example4.com.crt
/var/certs/example5.com.crt

Текущий неработающий вывод :

Cert_Name                         Common_Name                   Days_Expired
examle1.com.crt                   user@examle1.com              30
examle2.com.crt                   user@examle2.com              30
examle3.com.crt     30
examle4.com.crt     30
examle5.com.crt     30

Ожидается и вывод без проблем:

Cert_Name                                 Common_Name                         Days_Expired
example.com.crt                           example.com                         30

Ожидаемый вывод с проблемой: исключение из сертификата с отсутствующим Common_Name (CN)

Cert_Name                                 Common_Name                         Days_Expired
example.com.crt                           -                                   30

или

Cert_Name                                 Common_Name                         Days_Expired
example.com.crt                           N/A                                 30

PS. У меня уже есть дни, истекшие из предыдущего блока.

Ответы [ 2 ]

0 голосов
/ 27 января 2020

Я использовал предложение Ивана, но внутри массива я добавил:

common_name=$(openssl x509 -noout -email -in $cert)
   if [[ -z "$common_name" ]] ; then
        common_name="-" 
    fi

и

day_left=$(/root/server-fixes/ssl-cert-check -b -c $cert  | awk '{print $6}')
    if [[ -z "$day_left" ]] ; then
        day_left="-" 
    fi

, чтобы установить для переменной желаемое значение, если результат равен нулю

0 голосов
/ 23 января 2020

Могу ли я предложить этот подход? Сначала создайте список (массив) сертификатов.

certs=(
    certificate1.pem
    certificate2.pem
    certificate3.pem
    # and so on
)

или

certs=( $(ls /path/*.pem) )

и обработайте его

XY () { printf "\e[${2};${1}H${3}"; } # use this function to print in columns

Y=1 # set start Y(lines) to 1 and print 1st row
XY 0 $Y "Cert_Name"; XY 10 $Y "Common_Name"; XY 20 $Y "Days_Expired"
for cert in "${carts[@]}"; {
    ((Y++)) # inc Y to print lines
    common_name=$( code to get Common Name  )
    day_expired=$( code to get Days Expired )
    XY 2 $Y "${cert:-'N/A'}"; XY 12 $Y "${common_name:-'N/A'}"; XY 22 $Y "${day_expired:-'N/A'}"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...