Я использую ssl-cert-check для отслеживания списка сертификатов моих доменов.
В моем crontab я установил его на тихую работу и отправил мне электронное письмо с истекающими доменами, но для отладки я использую следующую команду:
ssl-cert-check -f ssldomains.txt -x 21 -i
Он правильно читает файл и извлекает сертификаты для всего списка, но, похоже, не получает правильную дату истечения срока действия сертификатов, выпущенных LetsEncrypt.org
Другие поставщики сертификатов, похоже, не подвержены этой проблеме.
Например, срок действия сертификата истекает 24 марта 2017 года, когда я проверяю его в своем браузере, как сообщается, истекает 15 января 2017 года.
Обслуживаю с nginx.
Почему инструмент командной строки извлекает неверную дату истечения срока действия и как это исправить?
Кажется, это SNI проблема. Если вы предоставляете несколько сертификатов SSL на одном IP-адресе, клиент отправляет имя хоста вместе с начальным запросом, поэтому сервер может предоставить правильный сертификат. Старые версии ssl-cert-check этого не делают, функция была представлена в версии 3.27.
Обе версии Ubuntu 14.04 и 16.04 поставляются с версией 3.27, но похоже, что в этой версии есть ошибки. В основном актуальны две строчки кода:
TLSSERVERNAME="FALSE"
и:
if [ "${TLSSERVERNAME}" = "TRUE" ]
then
TLSFLAG="${TLSFLAG} -servername $1"
fi
Как видите, для переменной установлено значение FALSE, а позже она проверяется на TRUE, но никогда не изменяется.
Текущая версия на GitHub (3.30) имеет дополнительный кодовый блок:
if ${OPENSSL} s_client -h 2>&1 | grep '-servername' > /dev/null
then
TLSSERVERNAME="TRUE"
else
TLSSERVERNAME="FALSE"
fi
Это проверяет установленную версию openssl на поддержку имени сервера. Когда я добавляю этот блок в сценарий в моей локальной установке Ubuntu, результат в порядке, без блока я получаю неправильный сертификат, как и вы.
Итак, это ошибка, которая была исправлена автором, но пока не нашла своего пути в репозиторий Ubuntu. Вы можете исправить это самостоятельно и надеяться, что после следующего обновления репо будет содержать фиксированную версию, или вы вместо этого воспользуетесь скриптом из github.