如何使用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

更新于:2020年7月3日

11K+ 次查看

启动您的职业生涯

完成课程获得认证

开始学习
广告