如何使用PowerShell获取网站SSL证书的有效期?
SSL证书对于网站至关重要。它们通过激活HTTPS安全连接,在客户端和服务器端之间安全地交换信息方面发挥着关键作用。在下面的文章中,我们将使用PowerShell获取证书的有效期(起始日期和过期日期)。
为此,我们需要发出**httpwebrequest**请求,但在此之前,我们将使用以下命令忽略SSL警告。
[Net.ServicePointManager]::ServerCertificateValidationCallback = { $true }
然后,我们将通过调用.Net类来发出HTTP Web请求。
$url = "https://www.microsoft.com/" $req = [Net.HttpWebRequest]::Create($url)
当我们检查**$req**时,会显示一些属性,但由于我们只对证书日期感兴趣,因此我们将使用特定的属性**ServicePoint**来检索相关信息。
$req.ServicePoint
以上命令的输出。
PS C:\WINDOWS\system32> $req.ServicePoint BindIPEndPointDelegate : ConnectionLeaseTimeout : -1 Address : https://www.microsoft.com/ MaxIdleTime : 100000 UseNagleAlgorithm : True ReceiveBufferSize : -1 Expect100Continue : True IdleSince : 23-06-2020 07:02:36 ProtocolVersion : 1.1 ConnectionName : https ConnectionLimit : 2 CurrentConnections : 0 Certificate : ClientCertificate : SupportsPipelining : True
正如您在上面的属性中看到的,certificate字段为空,因此要检索信息,我们需要使用**GetResponse()**方法。
$req.GetResponse()
以上命令的输出。
IsMutuallyAuthenticated : False Cookies : {} Headers : {Pragma, X-Activity-Id, MS-CV, X-AppVersion...} SupportsHeaders : True ContentLength : -1 ContentEncoding : ContentType : text/html; charset=utf-8 CharacterSet : utf-8 Server : LastModified : 23-06-2020 07:06:44 StatusCode : OK StatusDescription : OK ProtocolVersion : 1.1 ResponseUri : https://www.microsoft.com/en-in/ Method : GET IsFromCache : False
现在,我们将运行之前的命令并检查是否可以检索证书信息。
PS C:\WINDOWS\system32> $req.ServicePoint BindIPEndPointDelegate : ConnectionLeaseTimeout : -1 Address : https://www.microsoft.com/en-in/ MaxIdleTime : 100000 UseNagleAlgorithm : True ReceiveBufferSize : -1 Expect100Continue : True IdleSince : 23-06-2020 07:06:44 ProtocolVersion : 1.1 ConnectionName : https ConnectionLimit : 2 CurrentConnections : 1 Certificate : System.Security.Cryptography.X509Certificates.X509Cer tificate ClientCertificate : SupportsPipelining : True
是的,我们可以检索证书信息。如果**GetResponse()**命令抛出异常,您可以使用**try/catch**块,我将在最终脚本中使用它。但目前,我们只对检索证书日期感兴趣。
$req.ServicePoint.Certificate
您将看到如下所示的输出。
在上面的输出中,日期仍然缺失,因此我们将检查是否存在任何属性或方法来检索日期。我们将检查日期可用的属性和方法。
$req.ServicePoint.Certificate | gm | where{$_.Name -like "*Date*"} TypeName: System.Security.Cryptography.X509Certificates.X509Certificate Name MemberType Definition ---- ---------- ---------- GetEffectiveDateString Method string GetEffectiveDateString() GetExpirationDateString Method string GetExpirationDateString()
这里我们有两种方法可以获取过期日期和有效起始日期。
起始日期:
PS C:\WINDOWS\system32> $req.ServicePoint.Certificate.GetEffectiveDateString() 24-06-2019 06:25:35
结束日期:
PS C:\WINDOWS\system32> $req.ServicePoint.Certificate.GetExpirationDateString() 22-10-2021 03:34:04
完整的脚本如下所示。
[Net.ServicePointManager]::ServerCertificateValidationCallback = { $true } $url = "https://www.microsoft.com/" $req = [Net.HttpWebRequest]::Create($url) $req.GetResponse() | Out-Null $output = [PSCustomObject]@{ URL = $url 'Cert Start Date' = $req.ServicePoint.Certificate.GetEffectiveDateString() 'Cert End Date' = $req.ServicePoint.Certificate.GetExpirationDateString() } $output URL Cert Start Date Cert End Date --- --------------- ------------- https://www.microsoft.com/ 26-06-2019 09:10:38 22-10-2021 03:34:04
广告