Справочная информация: Я работаю на сервере OS X, и мне нужно использовать сертификаты из цепочки ключей с openssl smime, чтобы зашифровать сообщения в сценарии bash. Для этого я использую поисковый сертификат безопасности
с параметром -e
для извлечения сертификатов для определенного адреса электронной почты из цепочки ключей OS X. Однако это хорошо работает, команда извлекает все сертификаты, найденные для этого адреса электронной почты, в файл PEM. Файл будет даже содержать сертификаты с истекшим сроком действия.
Когда я использую файл PEM для шифрования почты с openssl smime
, очевидно, что используется только первый сертификат в файле PEM.
Итак, что нужно сделать, это выбрать сертификат с наибольшей датой истечения срока действия из файла PEM, чтобы я мог использовать его с openssl, но как это можно сделать?
Ha bármely le nem járt cert elfogadható :
$ # adjust filenames for your environment as desired
$ cat <<\EOF >awkscript # only need to do this setup once
BEGIN{ cmd="openssl x509 <tempfile -checkend 0" }
/^-----BEGIN/ {f=1}
f {print >"tempfile"}
/^-----END/ {f=0; close("tempfile"); cmd | getline status;
if( status ~ "not expire" ){ exit 0 }; close(cmd) }
END{ exit 1 }
EOF
$ if awk -f awkscript combinedpemfile
> then # use tempfile as cert for encryption
> else # no unexpired cert found
> fi
Ha kifejezetten szüksége van a lejárt időtartamra, nem látok egyszerű módszert a dátum-összehasonlítás automatizálására, de ez a többi:
$ cat <<\EOF >awkscript # again only once
BEGIN{ cmd="openssl x509 -noout -enddate" }
/^------BEGIN/ {f=1; t=""} f {t=t $0 ORS}
/^-----END/ {f=0; out="tempcert#"(++i); print t >out;
printf "%s: ",out; print t | cmd; close(cmd) }
EOF
$ awk -f awkscript combinedpemfile
tempcert#1: notAfter=(expiryfor1)
tempcert#2: notAfter=(expiryfor2)
tempcert#3: notAfter=(expiryfor3)
...
$ # pick the latest expiry and use the corresponding file (and clean up)