parent
903736c78f
commit
72eb1cb416
2 changed files with 0 additions and 155 deletions
@ -1,13 +0,0 @@ |
||||
# Certificate expiration |
||||
|
||||
# Description: Remaining days |
||||
# Type: Agent or Agent (active) |
||||
# Key: crt.expire[<port>] |
||||
# Type of information: Numeric (integer 64bit) |
||||
# Units: days |
||||
# Use multiplier: No |
||||
# Update interval: 86400 |
||||
# Store Value: As is |
||||
# Show Value: As is |
||||
|
||||
UserParameter=crt.expire[*],/var/lib/zabbix/bin/cert_expire.pl -p $1 |
@ -1,142 +0,0 @@ |
||||
#!/usr/bin/perl -w |
||||
# Check peer certificate validity for Zabbix |
||||
# Require perl module : IO::Socket, Net::SSLeay, Date::Parse |
||||
# Require unix programs : openssl, echo, sendmail |
||||
# |
||||
# Based on sslexpire from Emmanuel Lacour <elacour@home-dn.net> |
||||
# |
||||
# This file is free software; you can redistribute it and/or modify it |
||||
# under the terms of the GNU General Public License as published by the |
||||
# Free Software Foundation; either version 2, or (at your option) any |
||||
# later version. |
||||
# |
||||
# This file is distributed in the hope that it will be |
||||
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty |
||||
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||||
# General Public License for more details. |
||||
# |
||||
# You should have received a copy of the GNU General Public License |
||||
# along with this file; see the file COPYING. If not, write to the Free |
||||
# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA |
||||
# 02110-1301, USA. |
||||
# |
||||
|
||||
|
||||
use strict; |
||||
use IO::Socket; |
||||
use Net::SSLeay; |
||||
use Getopt::Long; |
||||
use Date::Parse; |
||||
|
||||
Net::SSLeay::SSLeay_add_ssl_algorithms(); |
||||
Net::SSLeay::randomize(); |
||||
|
||||
# Default values |
||||
my $opensslpath = "/usr/bin/openssl"; |
||||
|
||||
my $host = '127.0.0.1'; |
||||
my $port = '443'; |
||||
|
||||
my %opts; |
||||
GetOptions (\%opts, |
||||
'host|h=s', |
||||
'port|p=s', |
||||
'help', |
||||
); |
||||
|
||||
if ($opts{'host'}) { |
||||
$host = $opts{'host'}; |
||||
} |
||||
if ($opts{'port'}){ |
||||
$port = $opts{'port'}; |
||||
} |
||||
|
||||
if ($opts{'help'}) { |
||||
&usage; |
||||
} |
||||
|
||||
# Print program usage |
||||
sub usage { |
||||
print "Usage: sslexpire [OPTION]... |
||||
-h, --host=HOST check this host |
||||
-p, --port=TCPPORT check this port on the previous host |
||||
--help print this help, then exit |
||||
"; |
||||
exit; |
||||
} |
||||
|
||||
|
||||
# This will return the expiration date |
||||
sub getExpire { |
||||
|
||||
my ($l_host,$l_port) = @_; |
||||
my ($l_expdate,$l_comment); |
||||
|
||||
# Connect to $l_host:$l_port |
||||
my $socket = IO::Socket::INET->new( |
||||
Proto => "tcp", |
||||
PeerAddr => $l_host, |
||||
PeerPort => $l_port |
||||
); |
||||
# If we connected successfully |
||||
if ($socket) { |
||||
# Intiate ssl |
||||
my $l_ctx = Net::SSLeay::CTX_new(); |
||||
my $l_ssl = Net::SSLeay::new($l_ctx); |
||||
|
||||
Net::SSLeay::set_fd($l_ssl, fileno($socket)); |
||||
my $res = Net::SSLeay::connect($l_ssl); |
||||
|
||||
# Get peer certificate |
||||
my $l_x509 = Net::SSLeay::get_peer_certificate($l_ssl); |
||||
if ($l_x509) { |
||||
my $l_string = Net::SSLeay::PEM_get_string_X509($l_x509); |
||||
# Get the expiration date, using openssl |
||||
$l_expdate = `echo "$l_string" | $opensslpath x509 -enddate -noout 2>&1`; |
||||
$l_expdate =~ s/.*=//; |
||||
chomp($l_expdate); |
||||
} |
||||
else { |
||||
$l_expdate = 1; |
||||
} |
||||
|
||||
# Close and cleanup |
||||
Net::SSLeay::free($l_ssl); |
||||
Net::SSLeay::CTX_free($l_ctx); |
||||
close $socket; |
||||
} |
||||
else { |
||||
$l_expdate = 1; |
||||
} |
||||
return $l_expdate; |
||||
} |
||||
|
||||
|
||||
# Print remaining days before expiration |
||||
sub report { |
||||
# Convert date into epoch using date command |
||||
my ($l_expdate) = @_; |
||||
|
||||
if ($l_expdate ne "1") { |
||||
# The current date |
||||
my $l_today = time; |
||||
my $l_epochdate = str2time($l_expdate); |
||||
|
||||
# Calculate diff between expiration date and today |
||||
my $l_diff = ($l_epochdate - $l_today)/(3600*24); |
||||
|
||||
# Report if needed |
||||
printf "%.0f\n", $l_diff; |
||||
} |
||||
else { |
||||
print "Unable to read certificate!\n"; |
||||
exit (1); |
||||
} |
||||
} |
||||
|
||||
# Get expiration date |
||||
my $expdate = getExpire($host,$port); |
||||
|
||||
# Report |
||||
report("$expdate"); |
||||
|
Loading…
Reference in new issue