The script check if a (SSL / TLS) certificate is about to expire within the configured number of days. Requires INM v4 build 5290 or above.

CODE
function OnEnumerate(sFieldToEnum)

    Enum = LuaScriptEnumResult()

    if sFieldToEnum == "Ignore connection problems" then
        Enum:Add("Yes")
        Enum:Add("No")
    end

    return Enum
end

function OnConfigure()

    Config = LuaScriptConfigurator()
    Config:SetAuthor("Robert Aronsson, Intellipool AB")
    Config:SetDescription("The script check if a certificate is about to expire within the configured number of days.")
    Config:SetMinBuildVersion(5290)
    Config:SetScriptVersion(1,0)

    Config:AddArgument("Port number","Port number to connect on",LuaScriptConfigurator.CHECK_NOT_EMPTY)
    Config:AddArgument("Number of days","Check if certificate expres within this period",LuaScriptConfigurator.CHECK_NOT_EMPTY)
    Config:AddArgument("Ignore connection problems","Do you want the script to report connection problems as well ?",LuaScriptConfigurator.ENUM_AVAIL + LuaScriptConfigurator.CHECK_NOT_EMPTY)

    Config:SetEntryPoint("main")

    return Config
end

-- This is the entry point
function main()

    local iPort = GetArgument(0)
    local iNumDays = GetArgument(1)
    local bReportConnectionProblem = false;
    if GetArgument(2) == "Yes" then
        bReportConnectionProblem = true
    end

    -- Timeperiod that the certificate should be valid within
    local iOffsetTime = (60 * 60 * 24) * iNumDays

    -- Default values for test eval
    local bTestOk = true;
    local sText = "Certificate ok";

    -- Open socket
    Socket = TLuaSocketSecure()
    if Socket:Open(iPort) ~= 0 then

        CurrentTime = TLuaDateTime();

        -- The time was retrived during the connect
        Time = Socket:GetCertificateExpiryDate();

        print("Certificate expires ("..Time:GetDate() .." " .. Time:GetTime()..")");
        
        -- Check time
        iExpiryTime = Time:Get() - iOffsetTime;
        if Time:Get() < CurrentTime:Get() then
            bTestOk = false;
            sText = "Certificate have already expired ("..Time:GetDate() .." " .. Time:GetTime()..")";
        else
            if iExpiryTime < CurrentTime:Get() then
                bTestOk = false;
                sText = "Certificate is about to expire in less than "..iNumDays.." days"
            end
        end
    else
        -- Failed to open the socket, server down ?
        if bReportConnectionProblem == true then
            bTestOk = false;
        end
        sText = "Cannot connect to host.";
    end

    -- Report status and exit
    SetExitStatus(sText,bTestOk);
end