ssl_cert_expiry.nasl

来自「漏洞扫描源码,可以扫描linux,windows,交换机路由器」· NASL 代码 · 共 155 行

NASL
155
字号
## This script was written by George A. Theall, <theall@tifaware.com>.## See the Nessus Scripts License for details.#if ( ! defined_func("localtime") ) exit(0);# How far (in days) to warn of certificate expiry. [Hmmm, how often# will scans be run and how quickly can people obtain new certs???]lookahead = 60;if (description) {  script_id(15901);  script_version ("$Revision: 38 $");   script_name(english:"SSL Certificate Expiry");  script_summary(english:"Checks SSL certificate expiry");  desc["english"] = "Synopsis :The remote server's SSL certificate has already expired or will expireshortly.Description :This script checks expiry dates of certificates associated withSSL-enabled services on the target and reports whether any havealready expired or will expire shortly.Solution :Purchase or generate a new SSL certificate to replace the existingone. Risk factor :None";  script_description(english:desc["english"]);   script_category(ACT_GATHER_INFO);  script_family(english:"General");  script_copyright(english:"This script is Copyright (C) 2004 George A. Theall");  script_dependencies("find_service.nes");  exit(0);}include("global_settings.inc");include("misc_func.inc");include("ssl_funcs.inc");# This function converts a date expressed as:#   Year(2)|Month(2)|Day(2)|Hour(2)|Min(2)|Sec(2)# and returns it in a more human-friendly format.function x509time_to_gtime(x509time) {  local_var mons, parts, gtime;  mons = "JanFebMarAprMayJunJulAugSepOctNovDec";  if (x509time && x509time =~ "^[0-9]{12}Z?$") {    for (i=0; i<= 6; ++i) {      parts[i] = substr(x509time, i*2, i*2+1);    }    if (parts[0] =~ "^9") year = string("19", parts[0]);    else year = string("20", parts[0]);    mm = int(parts[1]);    if (mm >= 1 && mm <= 12) {      --mm;      mon = substr(mons, mm*3, mm*3+2);    }    else {      mon = "unk";    }    parts[2] = ereg_replace(string:parts[2], pattern:"^0", replace:" ");    gtime = string(      mon, " ",       parts[2], " ",       parts[3], ":", parts[4], ":", parts[5], " ",       year, " GMT"    );  }  return gtime;}port = get_kb_item("Transport/SSL");if (!port || !get_port_state(port)) exit(0);cert = get_server_cert(port:port, encoding:"der");if (!isnull(cert)) {  # nb: maybe someday I'll actually *parse* ASN.1.  v = stridx(cert, raw_string(0x30, 0x1e, 0x17, 0x0d));  if (v >= 0) {    v += 4;    valid_start = substr(cert, v, v+11);    v += 15;    valid_end = substr(cert, v, v+11);    if (valid_start =~ "^[0-9]{12}$" && valid_end =~ "^[0-9]{12}$") {      # Get dates, expressed in UTC, for checking certs.      # - right now.      tm = localtime(unixtime(), utc:TRUE);      now = substr(string(tm["year"]), 2);      foreach field (make_list("mon", "mday", "hour", "min", "sec")) {        if (tm[field] < 10) now += "0";         now += tm[field];      }      # - 'lookahead' days in the future.      tm = localtime(unixtime() + lookahead*24*60*60, utc:TRUE);      future = substr(string(tm["year"]), 2);      foreach field (make_list("mon", "mday", "hour", "min", "sec")) {        if (tm[field] < 10) future += "0";         future += tm[field];      }      debug_print("now:    ", now, ".");      debug_print("future: ", future, ".");      valid_start_alt = x509time_to_gtime(x509time:valid_start);      valid_end_alt = x509time_to_gtime(x509time:valid_end);      debug_print("valid not before: ", valid_start_alt, " (", valid_start, "Z).");      debug_print("valid not after:  ", valid_end_alt,   " (", valid_end, "Z).");      if (log_verbosity > 1) debug_print("The SSL certificate on port ", port, " is valid between ", valid_start_alt, " and ", valid_end_alt, ".", level:0);      if (valid_start > now) {        security_note(          data:string("The SSL certificate of the remote service is not valid before ", valid_start_alt, "!"),          port:port        );      }      else if (valid_end < now) {        security_warning(          data:string("The SSL certificate of the remote service expired ", valid_end_alt, "!"),          port:port        );      }      else if (valid_end < future) {        security_note(          data:string("The SSL certificate of the remote service will expire within ", lookahead, " days, at ", valid_end_alt, "."),          port:port        );      }    }  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?