使用PowerShell快速確認TLS憑證資訊

使用PowerShell快速確認TLS憑證資訊

看到黑大的自製網站 TLS 憑證 CLI 快速檢視工具,剛好我有點處理TLS憑證的經驗,也來獻醜一下。情境是這樣,在我們B2B資料交換系統上有許多第三方廠商的TLS憑證,想當然,這些TLS憑證用於資料交換加解密,因此很重要。現行規範是一年更新一次TLS憑證,但,就是有廠商會忘記通知我們更新TLS憑證。通常知道都是已經出事了。

預防勝於治療。

因此,我們決定做個排程小程式,每天確認這些憑證的有效日期,如果小於期望值,就發出警告通知。這裡我們使用PowerShell來撰寫:

Get-ChildItem -Path Cert:\LocalMachine\AddressBook\ -ExpiringInDays 30

程式一行寫完了。這裡的重點是使用了PowerShell Certificate Provider。它可以非常方便存取伺服器的憑證資訊。

例如,我們加工一下:

$expireList = Get-ChildItem -Path Cert:\LocalMachine\AddressBook\ -ExpiringInDays 30

if ($null -ne $expireList) {
    Write-Debug "Found expiring certificates."

    $logger = $expireList | ForEach-Object {
        $cert = $_
        $cert | Select-Object -Property Subject, NotAfter, @{Name="Days"; Expression={($_.NotAfter - (Get-Date)).Days}}
    } 
    # Convert to string for mail body
    $logger = $logger | Out-String

    # ToDO: Send your $logger mail notify
    Send-MailMessage -From 'System <system@abc.com>' -To 'Bruce <bruce@abc.com>' -Subject 'Found expiring certificates' -Body $logger
} else {
    Write-Debug "Not found expiring certificates."
}

注意:Send-MailMessage Cmdlet 已過時。不建議使用。此處只是為了舉例。

以上是伺服器內建的PowerShell就支援的功能,不需要PowerShell Core,即看即得即用。因此,現在很多時候,比起動手寫dotnet(C#),我會先想或先找PowerShell解決方案。

最後我跟同事還開玩笑的說,主程式只有一行,但寫Mail通知花費的力氣是主程式的數十倍!哈哈。

沒有留言:

張貼留言

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。