PoshCode Logo PowerShell Code Repository

Get-WebsiteCertificate by tarique 8 days ago (modification of post by Andy Arismendi view diff)
diff | embed code: <script type="text/javascript" src="http://PoshCode.org/embed/6802"></script>download | new post

This will return the specified website’s X.509 certificate either as an object or a file (if the -OutputFile parameter is specified). See included comment based help for documentation.

  1. <#     
  2.         .NOTES
  3.         ===========================================================================
  4.          Created with:  SAPIEN Technologies, Inc., PowerShell Studio 2014 v4.1.57
  5.          Created on:    11/3/2014 6:45 AM
  6.          Created by:    Brian
  7.          Organization:  
  8.          Filename:      
  9.         ===========================================================================
  10.         .DESCRIPTION
  11.                 A description of the file.
  12. #>
  13. $vcacapfqdn = $args[0]
  14.  
  15. function Get-WebsiteCertificate {
  16.         #By: Andy Arismendi
  17.         #http://poshcode.org/2521
  18.         [CmdletBinding()]
  19.         param (
  20.                 [Parameter(Mandatory = $true)] [System.Uri]
  21.                 $Uri,
  22.                 [Parameter()] [System.IO.FileInfo]
  23.                 $OutputFile,
  24.                 [Parameter()] [Switch]
  25.                 $UseSystemProxy,
  26.                 [Parameter()] [Switch]
  27.                 $UseDefaultCredentials,
  28.                 [Parameter()] [Switch]
  29.                 $TrustAllCertificates
  30.         )
  31.         try
  32.         {
  33.                 $request = [System.Net.WebRequest]::Create($Uri)
  34.                 if ($UseSystemProxy)
  35.                 {
  36.                         $request.Proxy = [System.Net.WebRequest]::DefaultWebProxy
  37.                 }
  38.                
  39.                 if ($UseSystemProxy -and $UseDefaultCredentials)
  40.                 {
  41.                         $request.Proxy.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials
  42.                 }
  43.                
  44.                 if ($TrustAllCertificates)
  45.                 {
  46.                         # Create a compilation environment
  47.                         $Provider = New-Object Microsoft.CSharp.CSharpCodeProvider
  48.                         $Compiler = $Provider.CreateCompiler()
  49.                         $Params = New-Object System.CodeDom.Compiler.CompilerParameters
  50.                         $Params.GenerateExecutable = $False
  51.                         $Params.GenerateInMemory = $True
  52.                         $Params.IncludeDebugInformation = $False
  53.                         $Params.ReferencedAssemblies.Add("System.DLL") > $null
  54.                         $TASource = @'
  55.                           namespace Local.ToolkitExtensions.Net.CertificatePolicy {
  56.                             public class TrustAll : System.Net.ICertificatePolicy {
  57.                               public TrustAll() {
  58.                               }
  59.                               public bool CheckValidationResult(System.Net.ServicePoint sp,
  60.                                 System.Security.Cryptography.X509Certificates.X509Certificate cert,
  61.                                 System.Net.WebRequest req, int problem) {
  62.                                 return true;
  63.                               }
  64.                             }
  65.                           }
  66. '@
  67.                         $TAResults = $Provider.CompileAssemblyFromSource($Params, $TASource)
  68.                         $TAAssembly = $TAResults.CompiledAssembly
  69.                        
  70.                         ## We now create an instance of the TrustAll and attach it to the ServicePointManager
  71.                         $TrustAll = $TAAssembly.CreateInstance("Local.ToolkitExtensions.Net.CertificatePolicy.TrustAll")
  72.                         [System.Net.ServicePointManager]::CertificatePolicy = $TrustAll
  73.                 }
  74.                
  75.                 $response = $request.GetResponse()
  76.                 $servicePoint = $request.ServicePoint
  77.                 $certificate = $servicePoint.Certificate
  78.                
  79.                 if ($OutputFile)
  80.                 {
  81.                         $certBytes = $certificate.Export(
  82.                         [System.Security.Cryptography.X509Certificates.X509ContentType]::Cert
  83.                         )
  84.                         [System.IO.File]::WriteAllBytes($OutputFile, $certBytes)
  85.                         $OutputFile.Refresh()
  86.                         return $OutputFile
  87.                 }
  88.                 else
  89.                 {
  90.                         return $certificate
  91.                 }
  92.         }
  93.         catch
  94.         {
  95.                 Write-Error "Failed to get website certificate. The error was '$_'."
  96.                 return $null
  97.         }
  98.        
  99.         <#
  100.                 .SYNOPSIS
  101.                         Retrieves the certificate used by a website.
  102.        
  103.                 .DESCRIPTION
  104.                         Retrieves the certificate used by a website. Returns either an object or file.
  105.        
  106.                 .PARAMETER  Uri
  107.                         The URL of the website. This should start with https.
  108.        
  109.                 .PARAMETER  OutputFile
  110.                         Specifies what file to save the certificate as.
  111.                        
  112.                 .PARAMETER  UseSystemProxy
  113.                         Whether or not to use the system proxy settings.
  114.                        
  115.                 .PARAMETER  UseDefaultCredentials
  116.                         Whether or not to use the system logon credentials for the proxy.
  117.                        
  118.                 .PARAMETER  TrustAllCertificates
  119.                         Ignore certificate errors for certificates that are expired, have a mismatched common name or are self signed.
  120.        
  121.                 .EXAMPLE
  122.                         PS C:\> Get-WebsiteCertificate "https://www.gmail.com" -UseSystemProxy -UseDefaultCredentials -TrustAllCertificates -OutputFile C:\gmail.cer
  123.                
  124.                 .INPUTS
  125.                         Does not accept pipeline input.
  126.        
  127.                 .OUTPUTS
  128.                         System.Security.Cryptography.X509Certificates.X509Certificate, System.IO.FileInfo
  129.         #>
  130. }
  131. ###Install Cert###
  132. Get-WebsiteCertificate "https://$vCACAPFQDN" -TrustAllCertificates -outputfile "C:\Temp\AP.cer"

Submit a correction or amendment below (
click here to make a fresh posting)
After submitting an amendment, you'll be able to view the differences between the old and new posts easily.

Syntax highlighting:


Remember me