Get-Certificates-A10.ps1

<#PSScriptInfo
  
.VERSION 1.0.0
  
.GUID 8e38f4d8-70a4-479e-90d9-8e87fe160c09
  
.AUTHOR Felipe Fuentes Milosavljevic - ffuentes3003@gmail.com
  
.COMPANYNAME Felipe Fuentes
  
.COPYRIGHT (c) 2020 Felipe Fuentes. All rights reserved.
  
.TAGS Certificate, A10, Axapi/v3
 
#>


<#
  
.DESCRIPTION
 Get Certificates From A10 Network Api V3
  
#>
 

Add-Type @"
    using System;
    using System.Net;
    using System.Net.Security;
    using System.Security.Cryptography.X509Certificates;
    public class ServerCertificateValidationCallback
    {
        public static void Ignore()
        {
            ServicePointManager.ServerCertificateValidationCallback +=
                delegate
                (
                    Object obj,
                    X509Certificate certificate,
                    X509Chain chain,
                    SslPolicyErrors errors
                )
                {
                    return true;
                };
        }
    }
"@

 
[ServerCertificateValidationCallback]::Ignore();

#force TLS1.2 (necessary for the management interface)
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12;

#$CredA10 = Get-Credential -Message "Enter Credential For A10"
$username = Read-Host -Prompt "Enter UserName for A10"
$password = Read-Host -Prompt "Enter Password For $username"

$device = "IP A10" #Change This For IP A10
$prefix = "https:" #Prefix Https
$base = "axapi/v3" #Base Uri
$apiauth = "axapi/v3/auth" #Uri Authenticate API
$apicert = "axapi/v3/slb/ssl-cert/oper" #Uri Get Certificates


#Credential Json
$jsoncreds = @"
{"credentials": {"username": "$username", "password": "$password"}}
"@


#Obtain Token Connection
$request = Invoke-RestMethod -Method Post -Uri "$prefix//$device/$apiauth" -Body $jsoncreds -ContentType application/json -ErrorVariable lostconnection | Select -ExpandProperty authresponse
$signature = $request.Signature

#Header
$head = @{ Authorization= "A10 $signature" }

#Validation Credentials
if($lostconnection -match ":403"){

    Write-Host "Usuario o Password Incorrecto"

}
else{
    
    #Obtain SSL
    $slb = Invoke-RestMethod -Uri "$prefix//$device/$apicert" -Method Default -Headers $head -ContentType application/json | Select -ExpandProperty ssl-cert

    #Search SSL Not Expire
    $certs = $slb.oper.'ssl-certs' | Where-Object {$_.status -match "Unexpired"} |  Select Name,Type,notbefore,notafter,common-name,status
    
    #Read All Certs
    foreach($read in $certs){

        $read
    
    }

}