Condividi tramite


Getting An SSL Web Page’s Certificate

When it comes time to rolling SSL certificates on web servers, nothing beats checking the server to see what is actually being served.

Get-SslWebPage outlook.com

Url CertName Expires
--- -------- -------
https://outlook.com:443/        outlook.com 4/17/2014 2:26:21 PM

 

Get-SslWebPage outlook.com -full

Url : https://outlook.com:443/
WebRequestObject : System.Net.HttpWebRequest
WebResponseObject : System.Net.HttpWebResponse
CertObject : System.Security.Cryptography.X509Certificates.X509Certificate
CertName : outlook.com
Expires : 4/17/2014 2:26:21 PM
Content :

 

 

 

function Get-SslWebPage {
     param (
         [Parameter(
             Position = 0, 
             Mandatory = $true, 
             ValueFromPipeline = $true,
             ValueFromPipelineByPropertyName = $true
         )] [String[]]$computer,
         [string]$url = $null,
         [int]$port = 443,
         [int]$Timeout = 10,
         [switch]$full
     );
    
     process {
         foreach ($myComputer in $computer) {
             $myComputer = $myComputer -replace "^https://";
             $ConnectString = "https://$myComputer`:$port/$url";
             Write-Verbose "Connect String: '$connectString'";
             $WebRequest = [Net.WebRequest]::Create($ConnectString)
             $WebRequest.Timeout = $Timeout * 1024;
             $WebRequest.AllowAutoRedirect = $false;
             [Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
             try { $webResponse = $WebRequest.GetResponse(); }
             catch { continue; }
             if ($webResponse) {
                 $output = $webResponse | Select-Object -Property @{
                     n = 'Url';
                     e = { $ConnectString; }
                 }, @{
                     n = 'WebRequestObject';
                     e = { $WebRequest; }
                 }, @{
                     n = 'WebResponseObject'; 
                     e = { $webResponse; }
                 }, @{
                     n = 'CertObject';
                     e = { $webRequest.ServicePoint.Certificate; }
                 }, @{
                     n = 'CertName';
                     e = { $webRequest.ServicePoint.Certificate.Subject -replace ",.*" -replace "^.*="; }
                 }, @{
                     n = 'Expires';
                     e = {
                     ([System.Security.Cryptography.X509Certificates.X509Certificate2]$webRequest.ServicePoint.Certificate).NotAfter }
                 }, @{
                     n = 'Content';
                     e = { ([IO.StreamReader]$webResponse.GetResponseStream()).ReadToEnd(); }
                 };
                 if ($full) {
                     $output;
                 } else {
                     $output | Select-Object -Property Url, CertName, Expires;
                 }
             } else {
                 Write-Warning "Unable to connect to $connectString"
             }
         }
     }
}