使用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通知花費的力氣是主程式的數十倍!哈哈。
沒有留言:
張貼留言
感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。