Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

PowerShellを使用したSSL/TLS証明書の有効期限の確認

サーバー証明書の予期しない期限切れは、ユーザーと顧客に多くの問題を引き起こす可能性があります。サイトとの安全な接続を確立できない、認証エラーが発生する、ブラウザに迷惑な通知が表示されるなどです。記事では、リモートサイトでSSL / TLS証明書の有効期限を確認する方法、またはドメイン内のサーバーまたはコンピューターのローカル証明書ストアで有効期限が切れる証明書のリストを取得する方法を示します。

PowerShellを使用してWebサイトSSL証明書の有効期限を取得する

多くのWebプロジェクトでは、無料のLet’sEncryptSSL証明書を使用してHTTPSを実装しています。これらの証明書は、 90の問題です。 日と定期的に更新する必要があります。通常、特別なスクリプトまたはボットは、ホスティング側またはサーバー側でLet’s Encrypt証明書を更新します(Windowsの場合はWACS、Linuxの場合はCertbotの場合があります)。ただし、証明書の自動更新が失敗する場合があります。 WebサイトでSSL証明書の有効期限を確認し、有効期限が近づいたときに通知する独自のスクリプトが欲しいのですが。 PowerShellを使用して作成しました。 HttpWebクエリを介してWebサイトの証明書を確認しているため、リモートのWebサイト/サーバーに対する管理者権限は必要ありません。

次のPowerShellスクリプトでは、証明書の有効期限を確認するWebサイトのリストと、対応する通知が表示され始める証明書の有効期間を指定する必要があります($minCertAge )。例として80日を入力しました。

$minCertAge = 80
$timeoutMs = 10000
$sites = @(
"https://testsite1.com/",
"https://testsite2.com/",
"https://woshub.com/"
)
# Disable certificate validation
[Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
foreach ($site in $sites)
{
Write-Host Check $site -f Green
$req = [Net.HttpWebRequest]::Create($site)
$req.Timeout = $timeoutMs
try {$req.GetResponse() |Out-Null} catch {Write-Host URL check error $site`: $_ -f Red}
$expDate = $req.ServicePoint.Certificate.GetExpirationDateString()
$certExpDate = [datetime]::ParseExact($expDate, “dd/MM/yyyy HH:mm:ss”, $null)
[int]$certExpiresIn = ($certExpDate - $(get-date)).Days
$certName = $req.ServicePoint.Certificate.GetName()
$certThumbprint = $req.ServicePoint.Certificate.GetCertHashString()
$certEffectiveDate = $req.ServicePoint.Certificate.GetEffectiveDateString()
$certIssuer = $req.ServicePoint.Certificate.GetIssuerName()
if ($certExpiresIn -gt $minCertAge)
{Write-Host The $site certificate expires in $certExpiresIn days [$certExpDate] -f Green}
else
{
$message= "The $site certificate expires in $certExpiresIn days"
$messagetitle= "Renew certificate"
Write-Host $message [$certExpDate]. Details:`n`nCert name: $certName`Cert thumbprint: $certThumbprint`nCert effective date: $certEffectiveDate`nCert issuer: $certIssuer -f Red
#Displays a pop-up notification and sends an email to the administrator
#ShowNotification $messagetitle $message
# Send-MailMessage -From powershell@woshub.com -To admin@woshub.com -Subject $messagetitle -body $message -SmtpServer gwsmtp.woshub.com -Encoding UTF8
}
write-host "________________" `n
}

このPowerShellスクリプトは、リスト内のすべてのWebサイトのSSL証明書をチェックします。有効期限が近づいている証明書が見つかった場合は、通知で強調表示されます。

PowerShellを使用したSSL/TLS証明書の有効期限の確認

SSL証明書の有効期限が近づいていることを管理者に通知するには、ポップアップ通知を追加します。これを行うには、スクリプト行「ShowNotification $messagetitle $message」のコメントを解除します。 」と入力し、次の関数を追加します。

Function ShowNotification ($MsgTitle, $MsgText) {
Add-Type -AssemblyName System.Windows.Forms
$global:balmsg = New-Object System.Windows.Forms.NotifyIcon
$path = (Get-Process -id $pid).Path
$balmsg.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon($path)
$balmsg.BalloonTipIcon = [System.Windows.Forms.ToolTipIcon]::Warning
$balmsg.BalloonTipText = $MsgText
$balmsg.BalloonTipTitle = $MsgTitle
$balmsg.Visible = $true
$balmsg.ShowBalloonTip(10000)
}

Send-MailMessageを使用してメール通知を送信することもできます 。

その後、期限切れまたは期限切れの証明書が見つかった場合は、電子メールとポップアップメッセージで通知されます。

PowerShellを使用したSSL/TLS証明書の有効期限の確認

次に、タスクスケジューラの自動タスクを作成して週に1〜2回実行し、PowerShellスクリプトを実行してHTTPSWebサイト証明書の有効期限を確認します。 (タスクスケジューラでタスクを作成し、Register-ScheduledTaskコマンドレットを使用してPS1スクリプトファイルを実行できます。)

Windows証明書ストアで期限切れの証明書をリモートで確認する方法

また、PowerShellスクリプトで、ドメインサーバー(RDP / RDS、Exchange、SharePoint、LDAPS証明書など)またはユーザーのコンピューター上の暗号化サービスで使用される証明書の有効期限を確認する必要がある場合もあります。

ローカルコンピューターでは、次のコマンドを使用して証明書のリストを取得できます。

Get-ChildItem -Path cert

Powershell3.0には特別な-ExpiringInDaysがあります 引数:

Get-ChildItem -Path cert: -Recurse -ExpiringInDays 30

PowerShell 2.0では、同じコマンドは次のようになります。

Get-ChildItem -Path cert: -Recurse | where { $_.notafter -le (get-date).AddDays(30) -AND $_.notafter -gt (get-date)} | select thumbprint, subject

自分の証明書のみを確認するには、Cert:\LocalMachine\Myを使用します Cert:の代わりにコンテナ ルートフォルダにあります。したがって、Windowsの信頼されたルート証明書と商用証明書を確認することはありません。

すべてのドメインサーバーで今後30日以内に期限切れになる証明書を見つけるには、次のPowerShellスクリプトを使用します。

$servers= (Get-ADComputer -LDAPFilter "(&(objectCategory=computer)(operatingSystem=Windows Server*) (!serviceprincipalname=*MSClusterVirtualServer*) (!(userAccountControl:1.2.840.113556.1.4.803:=2)))").Name
$result=@()
foreach ($server in $servers)
{
$ErrorActionPreference="SilentlyContinue"
$getcert=Invoke-Command -ComputerName $server { Get-ChildItem -Path Cert:\LocalMachine\My -Recurse -ExpiringInDays 30}
foreach ($cert in $getcert) {
$result+=New-Object -TypeName PSObject -Property ([ordered]@{
'Server'=$server;
'Certificate'=$cert.Issuer;
'Expires'=$cert.NotAfter
})
}
}
Write-Output $result

PowerShellを使用したSSL/TLS証明書の有効期限の確認

期限切れが近づいているサーバー証明書のリストが表示され、それらを更新するのに十分な時間があります。


  1. JavaScriptでチェックボックスをチェックする

    以下が入力タイプのチェックボックスであるとしましょう- <lable>John</lable> <input id="checkedValue1" type="checkbox"> <lable>David</lable> <input id="checkedValue2" type="checkbox"> チェックボックスのいずれかをチェックしたい。チェックボックスをオンにするには、checkedプロパティを使用します。 例 以下はコード

  2. 修正:このウェブサイトのセキュリティ証明書に問題があります

    一部のWindowsユーザーは、「このWebサイトのセキュリティ証明書に問題があります」などのHTTPS証明書エラーを継続的に受け取るという奇妙な問題を経験しています。 「Twitter、Google、Facebookなどの有名なサイトやアプリにアクセスしようとするとエラーが発生します。ほとんどの場合、影響を受けるユーザーは、使用しようとするすべてのブラウザで同じタイプのエラーが発生することを報告しています。 結局のところ、これらの証明書エラーの原因となる最も一般的な原因は、日付と時刻の値が大幅に古くなっていることです。また、ブラウザに表示されるエラーは異なりますが、修正は常に同じです。シ