날짜가 다음 주 이내인지 확인하세요.

날짜가 다음 주 이내인지 확인하세요.

LetsEncrypt를 사용하여 SSL을 자동으로 갱신하는 스크립트를 만들어 보세요.

일일 스크립트는 먼저 SSL 만료 시간을 확인합니다.

response="$(openssl x509 -enddate -noout -in ~/letsencrypt/www.mydomain.com/cert.pem)"

$responsenotAfter=May 9 19:27:44 2018 GMT

오늘 날짜와 비교하여 시차가 7일 이하인지 확인하고 싶습니다. 의사코드:

if [$response is less than 7 days away from today] then cd ~/letsencrypt $$ ~/dehydrated/dehydrated --cron --domain www.mydomain.com --out . --challenge http-01

어떻게 해야 하나요?

$response보다 실행 가능한 형식으로 변환하려고 시도했지만 오류가 date -d발생합니다 .date: extra operand ‘19:27:44’

답변1

귀하가 요청한 특정 질문보다는 귀하의 실제 우려 사항을 해결해 드리겠습니다. dehydrated --cron날짜가 확인되었습니다.

문서:

--cron( -c) 존재하지 않는/변경/만료된 인증서에 서명/갱신합니다.

암호:

# Check expire date of existing certificate
if [[ -e "${cert}" ]]; then
  echo " + Checking expire date of existing cert..."
  valid="$("${OPENSSL}" x509 -enddate -noout -in "${cert}" | cut -d= -f2- )"

  printf " + Valid till %s " "${valid}"
  if "${OPENSSL}" x509 -checkend $((RENEW_DAYS * 86400)) -noout -in "${cert}"; then
    printf "(Longer than %d days). " "${RENEW_DAYS}"
    if [[ "${force_renew}" = "yes" ]]; then
      echo "Ignoring because renew was forced!"
    else
      # Certificate-Names unchanged and cert is still valid
      echo "Skipping renew!"

(https://github.com/lukas2511/de线/blob/master/de线#L1234-L1253)

RENEW_DAYS기본값은 30인 것 같지만 구성 파일을 사용하여 이를 재정의할 수 있습니다.문서:

deHydrated는 여러 다른 위치에서 구성 파일을 찾고 있으며 다음 순서로 찾은 첫 번째 파일을 사용합니다.

  • /etc/dehydrated/config
  • /usr/local/etc/dehydrated/config
  • 쉘의 현재 작업 디렉토리
  • 탈수를 실행할 디렉터리

샘플 구성 파일에는 다음 줄이 포함되어 있습니다.

# Minimum days before expiration to automatically renew certificate (default: 30)
#RENEW_DAYS="30"

예를 들어 값을 기본값인 30일에서 7일로 낮추려면 두 번째 줄을 다음과 같이 편집합니다.

RENEW_DAYS="7"

답변2

이제 1970년 1월 1일까지의 초 수를 구하고 그 차이를 하루의 초 수로 나눕니다.

$ TZ=GMT date -d "May 9 19:27:44 2018 GMT" '+%s'
1525894064
$ TZ=GMT date '+%s'                             
1518192447
$ expr \( 1525894064 - 1518192447 \) / 86400
89

답변3

다음 명령은 "지금부터 7일" 날짜와 비교하여 openssl 명령이 제공한 날짜를 확인합니다. openssl 날짜(에포크 이후 초)가 지금부터 7일(에포크 이후 초)보다 작으면 명령이 if성공하고 사용자는 필요한 것을 할 수 있습니다:

response="$(openssl x509 -enddate -noout -in ~/letsencrypt/www.mydomain.com/cert.pem)"
responsetime=${response##notAfter=}
responsetz={$responsetime##* }
if [ $(date -d "$responsetime" +%s) -lt $(TZ=$responsetz date -d "now + 7 days" +%s) ]
then
   ## do the needful
fi

첫 번째 할당($response를 얻은 후)은 선행 "notAfter=" 텍스트를 제거합니다. 두 번째 작업은 응답의 시간대를 캡처합니다. 이는 항상 GMT인 경우 단순화될 수 있습니다.

이 두 날짜 명령은 openssl 날짜와 "현재 + 7일" 이후의 (GNU) 날짜 시간(초)을 요청합니다. 두 번째 호출의 시간대를 openssl 명령에서 보고된 시간대로 설정하도록 주의하세요.

관련 정보