Downloads
1.2KB
Objective
To be automatically notified when an SSL Certificate is about to reach its expiration date.
Solution
Monitor SSL Certificate Expiration dates with Monitoring Studio.
On Linux systems
A pre-existing shell script exists and can be downloaded from here:
Details about how to use this script can be found at the same address.
By configuring Monitoring Studio/Monitoring Studio Express to run the following command:
$ ssl-cert-check -f ssldomains
Host Status Expires Days Left
----------------------------------------------- ------------ ------------ ----------
www.prefetch.com:443 Valid May 23 2006 218
A Numerical Value Extraction can be used to collect the "Days Left" value, upon which thresholds can be set.
On Windows systems
A simple batch file has been written by Sentry Software (below) that can perform the same task.
This batch file will return the number of days until expiry.
Note: the value can include a fraction of a day, due the way the calculation is done and how leap years are taken into configuration.
The batch file might require customization based on the date format returned by the windows systems. English, French, German and Swedish formats are included by default.
Batch file installation instructions for Monitoring Studio KM for PATROL
- Install openssl on the Server with the PATROL Agent and add c:\openssl\bin to the main system path.
- A copy of nawk.exe will also need to be in the main system path.
- Create a new Command Line Analysis
Command to execute - ssl-cert-check hostname port
i.e. - ssl-cert-check redhat.com 443 - Create a numerical value extraction.
“In the following Column Number”
“1”
Format - “100000.00” - Then set the thresholds you require.
Batch file installation instructions for BMC Performance Manager Express Monitoring Studio
- Install openssl on a Server. Add c:\openssl\bin to the main system path. A copy of nawk.exe will also need to be in the main system path.
- Test the batch file by running: ssl-cert-check redhat.com 443
- Add an element in Portal of type Windows.
- Add Studio - Remote Command Execution and Analysis (Windows)
Enter credentials
Add a Remote Command Execution and Analysis (Windows) : Input properties
Command to execute - ssl-cert-check hostname port
Create a numerical value extraction.
“In the following Column Number”
“1”
Format - “100000.00” - Then set the thresholds you require.
Batch File (ssl-cert-check.bat) contents
@echo off
:: %1 = ServerAddress
:: %2 = Port
:: Get the certificate
openssl s_client -connect %1:%2 2%TMP%\SW_%1.err 1%TMP%\SW_%1.crt
:: Echo Today's date
echo. | date %TMP%\SW_%1.date
:: Echo Expiry date
openssl x509 -in %TMP%\SW_%1.crt -enddate -noout %TMP%\SW_%1.date
:: Process this through an awk script
:: Note: The Awk script might need to be modified if the OS language is not English
:: Execute a "date" from the command prompt to get the format
:: Enter the new date: (dd-mm-yy) = /.dd.mm.yy./
echo $NF ~ /[0-9]+[-.\/ ][0-9]+[-.\/ ][0-9]+/ {today=$NF;getline;format=$NF; %TMP%\SW_%1.awk
:: ENGLISH (DD MM YY)
echo if (format~/.yy.mm.dd./) {split(today,t,"[-.\/ ]");TodayD=t[3];TodayM=t[2];TodayY=t[1];} %TMP%\SW_%1.awk
echo if (format~/.mm.dd.yy./) {split(today,t,"[-.\/ ]");TodayD=t[2];TodayM=t[1];TodayY=t[3];} %TMP%\SW_%1.awk
echo if (format~/.dd.mm.yy./) {split(today,t,"[-.\/ ]");TodayD=t[1];TodayM=t[2];TodayY=t[3];} %TMP%\SW_%1.awk
echo. %TMP%\SW_%1.awk
:: FRENCH (JJ MM AA)
echo if (format~/.aa.mm.jj./) {split(today,t,"[-.\/ ]");TodayD=t[3];TodayM=t[2];TodayY=t[1];} %TMP%\SW_%1.awk
echo if (format~/.mm.jj.aa./) {split(today,t,"[-.\/ ]");TodayD=t[2];TodayM=t[1];TodayY=t[3];} %TMP%\SW_%1.awk
echo if (format~/.jj.mm.aa./) {split(today,t,"[-.\/ ]");TodayD=t[1];TodayM=t[2];TodayY=t[3];} %TMP%\SW_%1.awk
echo. %TMP%\SW_%1.awk
:: GERMAN (TT MM JJ)
echo if (format~/.jj.mm.tt./) {split(today,t,"[-.\/ ]");TodayD=t[3];TodayM=t[2];TodayY=t[1];} %TMP%\SW_%1.awk
echo if (format~/.mm.tt.jj./) {split(today,t,"[-.\/ ]");TodayD=t[2];TodayM=t[1];TodayY=t[3];} %TMP%\SW_%1.awk
echo if (format~/.tt.mm.jj./) {split(today,t,"[-.\/ ]");TodayD=t[1];TodayM=t[2];TodayY=t[3];} %TMP%\SW_%1.awk
echo. %TMP%\SW_%1.awk
:: SWEDISH (TT MM JJ)
echo if (format~/.år.må.da./) {split(today,t,"[-.\/ ]");TodayD=t[3];TodayM=t[2];TodayY=t[1];} %TMP%\SW_%1.awk
echo if (format~/.må.da.år./) {split(today,t,"[-.\/ ]");TodayD=t[2];TodayM=t[1];TodayY=t[3];} %TMP%\SW_%1.awk
echo if (format~/.da.må.år./) {split(today,t,"[-.\/ ]");TodayD=t[1];TodayM=t[2];TodayY=t[3];} %TMP%\SW_%1.awk
echo. %TMP%\SW_%1.awk
echo if (TodayY ^ 100) {TodayY="20"TodayY}; %TMP%\SW_%1.awk
echo TodayJDY = TodayY + 4800 - ((14-TodayM)/12) %TMP%\SW_%1.awk
echo TodayJDM = TodayM + 12 * ((14-TodayM)/12) - 3 %TMP%\SW_%1.awk
echo TodayJD = TodayD + (153*TodayJDM+2)/5 + TodayJDY*365 + TodayJDY/4 - 32083 %TMP%\SW_%1.awk
echo. %TMP%\SW_%1.awk
echo getline; %TMP%\SW_%1.awk
echo. %TMP%\SW_%1.awk
echo ExpireMWord=$1; gsub (/notAfter=/,"",ExpireMonthWord); %TMP%\SW_%1.awk
echo if (ExpireMWord ~ /Jan/) {ExpireM=1} %TMP%\SW_%1.awk
echo if (ExpireMWord ~ /Feb/) {ExpireM=2} %TMP%\SW_%1.awk
echo if (ExpireMWord ~ /Mar/) {ExpireM=3} %TMP%\SW_%1.awk
echo if (ExpireMWord ~ /Apr/) {ExpireM=4} %TMP%\SW_%1.awk
echo if (ExpireMWord ~ /May/) {ExpireM=5} %TMP%\SW_%1.awk
echo if (ExpireMWord ~ /Jun/) {ExpireM=6} %TMP%\SW_%1.awk
echo if (ExpireMWord ~ /Jul/) {ExpireM=7} %TMP%\SW_%1.awk
echo if (ExpireMWord ~ /Aug/) {ExpireM=8} %TMP%\SW_%1.awk
echo if (ExpireMWord ~ /Sep/) {ExpireM=9} %TMP%\SW_%1.awk
echo if (ExpireMWord ~ /Oct/) {ExpireM=10} %TMP%\SW_%1.awk
echo if (ExpireMWord ~ /Nov/) {ExpireM=11} %TMP%\SW_%1.awk
echo if (ExpireMWord ~ /Dec/) {ExpireM=12} %TMP%\SW_%1.awk
echo ExpireD=$2 %TMP%\SW_%1.awk
echo ExpireY=$4 %TMP%\SW_%1.awk
echo. %TMP%\SW_%1.awk
echo ExpireJDY = ExpireY + 4800 - ((14-ExpireM)/12) %TMP%\SW_%1.awk
echo ExpireJDM = ExpireM + 12 * ((14-ExpireM)/12) - 3 %TMP%\SW_%1.awk
echo ExpireJD = ExpireD + (153*ExpireJDM+2)/5 + ExpireJDY*365 + ExpireJDY/4 - 32083 %TMP%\SW_%1.awk
echo if ((TodayJD ^ 2451000) ^&^& (ExpireJD ^ 2451000)) {print ExpireJD-TodayJD} %TMP%\SW_%1.awk
echo } %TMP%\SW_%1.awk
nawk -f %TMP%\SW_%1.awk %TMP%\SW_%1.date
@REM ----------END OF BATCH FILE---------------