使用PowerShell检查HTTPS证书到期时间 ― 直接使用.NET的SslStream

ネットワーク・RFCカテゴリを表すパンダのイラスト 网络・RFC

关于本文
本文由生成式AI辅助的自动化流程创建。旨在确认.NET的SslStream与X509Certificate2规范,并整理为通过PowerShell检查HTTPS证书到期时间的技巧。

验证状态:📘 已确认官方API・已实现PowerShell示例・未进行实机验证

使用PowerShell检查HTTPS证书到期时间 ― 直接使用.NET的SslStream

无需在浏览器中打开证书界面,通过PowerShell建立TLS连接即可获取服务器证书。这里使用的不是PowerShell专用的cmdlet,而是.NET的 TcpClient 和 SslStream 。

最小示例

$hostName = "example.com"

# TcpClient是负责TCP连接的.NET类。


# 此处并非直接使用TLS,而是首先连接到443端口。

$tcp = New-Object System.Net.Sockets.TcpClient
$ssl = $null

try {
    $tcp.Connect($hostName, 443)

    # 通过在TCP之上叠加SslStream,从此处开始进行TLS通信。

    $ssl = New-Object System.Net.Security.SslStream($tcp.GetStream(), $false)

    # 执行TLS握手,并验证证书的名称和可信度。

    $ssl.AuthenticateAsClient($hostName)

    # 将连接方提供的证书转换为便于处理的X509Certificate2。

    $cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($ssl.RemoteCertificate)

    # 从证书的有效截止日期(NotAfter)减去当前时间,计算出剩余天数。

    $days = [math]::Floor(($cert.NotAfter.ToUniversalTime() - [DateTime]::UtcNow).TotalDays)

    $cert | Select-Object Subject, Issuer, NotBefore, NotAfter, Thumbprint
    "DaysRemaining = $days"
}
finally {

    # 即使中途发生错误,也确保关闭TLS/TCP连接。

    if ($ssl) { $ssl.Dispose() }
    $tcp.Close()
}

通过 AuthenticateAsClient 进行TLS客户端身份验证,然后将 RemoteCertificate 作为X509Certificate2读取。

切勿禁用证书验证

网上虽然有些示例使用“通过回调始终返回 true 来获取证书”,但作为到期检查工具,这样做会放行无效证书。

本示例使用默认验证,如果TLS验证失败则报错。在故障排查中,“无法连接”这一事实本身就非常重要。

计算剩余天数

NotAfter 是证书的有效期限。通过计算与当前时间的差值,可以将其扩展为监控脚本。

例如,可以添加判断逻辑:剩余不足30天则发出警告,不足7天则发出严重警告。

flowchart LR
    A[TCP 443接続] --> B[SslStream]
    B --> C[TLS認証]
    C --> D[RemoteCertificate]
    D --> E[NotAfterを確認]

GitHub示例

官方信息与一手资料

文档信息

文章??
使用PowerShell检查HTTPS证书到期时间 ― 直接使用.NET的SslStream
?布日期
更新日期
来源
https://papanda925.com/?p=15222&lang=zh

?可: ?于本站?有相??利的正文及原??表,除非?有?明,可依据 CC BY 4.0 使用。本文可能包含使用生成式AI?建或??的内容。若代??有?可声明,或?接的GitHub???定了?可,?代?以??可?准。引用内容、第三方?料、?片及商?不在本?可范?内。 使用政策

标题和URL已复制