can we get any report option to fetch below SSL cert details from template. see attached screen short
Issuer:
Valid From:
Valid To:
Subject:
Subject Alternative Name:
Thumbprint
Did you want to record that information or only send it over via an alert? The data is there (though not parsed well), and can be included in an alert message without too much difficulty.
But if you wanted to "record" this kind of data (for storage in the Orion database), then you'd have to write your own SAM Script template. There are a few examples over in the SAM Content Exchange.
Hi
I took the script from KMSigma.SWI above and changed is just a bit, added that the URL is taken from the argument field in the component. Script then goes like this:
# Tested with PowerShell 5.1 #region Define Exit Codes # Shamelessly stolen from https://blog.kmsigma.com/2017/09/08/sam-powershell-scripting-template/ $ExitCode = @{ "Up" = 0; "Down" = 1; "Warning" = 2; "Critical" = 3; "Unknown" = 4 } #endregion Define Exit Codes # Ignore SSL Warnings [System.Net.ServicePointManager]::ServerCertificateValidationCallback = { $true} # Set the Target URL $Url = $args[0] # Build the request $WebRequest = [Net.HttpWebRequest]::Create($Url) $WebRequest.Method = "HEAD" #region This does the web request and extracts the important data # Make the request, but we don't need to output anything $WebRequest.GetResponse() | Out-Null # Dig out the SSL Certrificate $Certificate = $WebRequest.ServicePoint.Certificate $CertExpiration = [datetime]( $Certificate.GetExpirationDateString() ) $CertIssuer = ( $Certificate.GetIssuerName() ).Split("=")[-1] $CertSubject = $Certificate.Subject #endregion This does the web request and extracts the important data if ( $CertExpiration -and $CertIssuer -and $CertSubject ) { # Calculate days until certificate expiration $ExpiresIn = ( $CertExpiration - ( Get-Date ) ) Write-Host "Message.Issuer: Certificate Issuer is '$CertIssuer'" Write-Host "Statistic.Issuer: 1" Write-Host "Message.Expiration: Certificate expires on $( $CertExpiration )" Write-Host "Statistic.Expiration: $( $ExpiresIn.Days )" Write-Host "Message.Subject: $CertSubject" Write-Host "Statistic.Subject: 1" $Status = "Up" } else { # We don't have the data we want, so let's output the same "things" but change them out for errors Write-Host "Message.Issuer: [Not Detected]" Write-Host "Statistic.Issuer: 0" Write-Host "Message.Expiration: [Not Detected]" Write-Host "Statistic.Expiration: 0" Write-Host "Message.Subject: [Not Detected]" Write-Host "Statistic.Subject: 0" $Status = "Unknown" } # In a component monitor, you'll need to send back an exit code exit $ExitCode[$Status] # just remove the '#' from the above line to enable that
When configuring the component it looks like this to check the certificate at www.solarwinds.com:
Then I rewrote my previous script. It looks for all components with names starting with "SSL Cert Expiration" and gives you a list of them all. Script, that can be used both as widget or base for a report, looks like this:
SELECT C.Name AS [Name] ,ISNULL(CS.Value,CTS.Value) AS [Website] ,S2.NumericData AS [Days until expire] ,S1.StringData AS [Issuer] ,S2.StringData AS [Expiration] ,S3.StringData AS [Subject] --Links For Columns ,ISNULL(CS.Value,CTS.Value) AS [_LinkFor_Website] ,C.DetailsURL AS [_LinkFor_name] --Icon For Columns ,CASE WHEN c.Status=1 THEN '/Orion/APM/images/StatusIcons/Components/Small-Up.gif' WHEN c.Status=3THEN '/Orion/APM/images/StatusIcons/Components/Small-Warning.gif' WHEN c.Status=14 THEN '/Orion/APM/images/StatusIcons/Components/Small-Critical.gif' WHEN c.Status=27 THEN '/Orion/APM/images/StatusIcons/Components/Small-Unmanaged.gif' ELSE '/Orion/APM/images/StatusIcons/Components/Small-Unknown.gif' END as [_IconFor_Name] FROM Orion.APM.Component AS C INNER JOIN Orion.APM.MultipleStatisticData AS S1 ON C.ComponentID=S1.ComponentID AND S1.Name='Issuer' INNER JOIN Orion.APM.MultipleStatisticData AS S2 ON C.ComponentID=S2.ComponentID AND S2.Name='Expiration' INNER JOIN Orion.APM.MultipleStatisticData AS S3 ON C.ComponentID=S3.ComponentID AND S3.Name='Subject' LEFT OUTER JOIN Orion.APM.ComponentSetting AS CS ON C.ComponentID=CS.ComponentID AND CS.key='Scriptarguments' LEFT OUTER JOIN Orion.APM.ComponentTemplateSetting AS CTS ON C.TemplateID=CTS.ComponentTemplateID AND CTS.key='Scriptarguments' WHERE C.Name LIKE 'SSL Cert Expiration%' ORDER BY S2.NumericData
A widget with above could then look like this:
Hi
Can we adjust the table a bit?
Changed the script at bit as you wanted Sumit12;
SELECT C.Name AS [Name] ,C.Application.Node.Caption AS [Server] ,C.Application.Node.IP_Address AS [Server IP] ,ISNULL(CS.Value,CTS.Value) AS [Website] ,S2.NumericData AS [Days until expire] --,S1.StringData AS [Issuer] ,SUBSTRING(S1.StringData,24,100) as [Issuer] ,S2.StringData AS [Expiration] ,S3.StringData AS [Subject Common Name] --Links For Columns ,ISNULL(CS.Value,CTS.Value) AS [_LinkFor_Website] ,C.DetailsURL AS [_LinkFor_name] ,C.Application.Node.DetailsUrl AS [_LinkFor_Server] --Icon For Columns ,CASE WHEN c.Status=1 THEN '/Orion/APM/images/StatusIcons/Components/Small-Up.gif' WHEN c.Status=3THEN '/Orion/APM/images/StatusIcons/Components/Small-Warning.gif' WHEN c.Status=14 THEN '/Orion/APM/images/StatusIcons/Components/Small-Critical.gif' WHEN c.Status=27 THEN '/Orion/APM/images/StatusIcons/Components/Small-Unmanaged.gif' ELSE '/Orion/APM/images/StatusIcons/Components/Small-Unknown.gif' END as [_IconFor_Name] FROM Orion.APM.Component AS C INNER JOIN Orion.APM.MultipleStatisticData AS S1 ON C.ComponentID=S1.ComponentID AND S1.Name='Issuer' INNER JOIN Orion.APM.MultipleStatisticData AS S2 ON C.ComponentID=S2.ComponentID AND S2.Name='Expiration' INNER JOIN Orion.APM.MultipleStatisticData AS S3 ON C.ComponentID=S3.ComponentID AND S3.Name='Subject' LEFT OUTER JOIN Orion.APM.ComponentSetting AS CS ON C.ComponentID=CS.ComponentID AND CS.key='Scriptarguments' LEFT OUTER JOIN Orion.APM.ComponentTemplateSetting AS CTS ON C.TemplateID=CTS.ComponentTemplateID AND CTS.key='Scriptarguments' WHERE C.Name LIKE 'SSL Cert Expiration%' ORDER BY S2.NumericData
Hi Seashore,
Thanks for sharing script
after using this script i am getting same message/output in Issuer, Subject and expiration column
earlier script i was using
SELECT
C.Name AS [Name]
,ISNULL(CS.Value,CTS.Value) AS [Website]
,S2.NumericData AS [Days until expire]
,S1.StringData AS [Issuer]
,S2.StringData AS [Expiration]
,S3.StringData AS [Subject]
--Links For Columns
,ISNULL(CS.Value,CTS.Value) AS [_LinkFor_Website]
,C.DetailsURL AS [_LinkFor_name]
--Icon For Columns
,CASE
WHEN c.Status=1 THEN '/Orion/APM/images/StatusIcons/Components/Small-Up.gif'
WHEN c.Status=3THEN '/Orion/APM/images/StatusIcons/Components/Small-Warning.gif'
WHEN c.Status=14 THEN '/Orion/APM/images/StatusIcons/Components/Small-Critical.gif'
WHEN c.Status=27 THEN '/Orion/APM/images/StatusIcons/Components/Small-Unmanaged.gif'
ELSE '/Orion/APM/images/StatusIcons/Components/Small-Unknown.gif'
END as [_IconFor_Name]
FROM Orion.APM.Component AS C
INNER JOIN Orion.APM.MultipleStatisticData AS S1 ON C.ComponentID=S1.ComponentID AND S1.Name='Issuer'
INNER JOIN Orion.APM.MultipleStatisticData AS S2 ON C.ComponentID=S2.ComponentID AND S2.Name='Expiration'
INNER JOIN Orion.APM.MultipleStatisticData AS S3 ON C.ComponentID=S3.ComponentID AND S3.Name='Subject'
LEFT OUTER JOIN Orion.APM.ComponentSetting AS CS ON C.ComponentID=CS.ComponentID AND CS.key='Scriptarguments'
LEFT OUTER JOIN Orion.APM.ComponentTemplateSetting AS CTS ON C.TemplateID=CTS.ComponentTemplateID AND CTS.key='Scriptarguments'
WHERE C.Name LIKE 'SSL Certificate details%'
ORDER BY S2.NumericData
SolarWinds solutions are rooted in our deep connection to our user base in the THWACK® online community. More than 195,000 members are here to solve problems, share technology and best practices, and directly contribute to our product development process.