Есть сервис, представляется внутри локалки и снаружи. Например service.company.com. Имя внутреннего домена, к примеру, company.local.
Во внутреннем DNS заведено внешнее имя сервиса с внутренним адресом сервера. Наружу опубликован через реверс-прокси с белым адресом, соответственно.
Т.е. клиент снаружи попадает на реверс-прокси, изнутри на внутренний сервер напрямую.
На реверс-прокси используется купленный сертификат, задача мониторить срок его действия, когда он к концу подойдет. Если с внутренним сервером такой проблемы нет, скрипт проверяет внутренний сертификат, то как скриптом изнутри сети получить доступ к внешнему имени, не очень понятно. Есть идеи?
Updated: 13 November 2020, 12:12:03
Так, вроде нашел что-то:
Resolve-DnsName -Name service.company.com -Server 8.8.8.8
Updated: 13 November 2020, 12:44:39
Теперь другой вопрос, как в принципе в повершелле из HTTP-запроса вытащить сертификат и дату его окончания?
Retif, это?
$minimumCertAgeDays = 60
$timeoutMilliseconds = 10000
$urls = get-content .\check-urls.txt
#disabling the cert validation check. This is what makes this whole thing work with invalid certs...
[Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
foreach ($url in $urls)
{
Write-Host Checking $url -f Green
$req = [Net.HttpWebRequest]::Create($url)
$req.Timeout = $timeoutMilliseconds
$req.AllowAutoRedirect = $false
try {$req.GetResponse() |Out-Null} catch {Write-Host Exception while checking URL $url`: $_ -f Red}
$certExpiresOnString = $req.ServicePoint.Certificate.GetExpirationDateString()
#Write-Host "Certificate expires on (string): $certExpiresOnString"
[datetime]$expiration = [System.DateTime]::Parse($req.ServicePoint.Certificate.GetExpirationDateString())
#Write-Host "Certificate expires on (datetime): $expiration"
[int]$certExpiresIn = ($expiration - $(get-date)).Days
$certName = $req.ServicePoint.Certificate.GetName()
$certPublicKeyString = $req.ServicePoint.Certificate.GetPublicKeyString()
$certSerialNumber = $req.ServicePoint.Certificate.GetSerialNumberString()
$certThumbprint = $req.ServicePoint.Certificate.GetCertHashString()
$certEffectiveDate = $req.ServicePoint.Certificate.GetEffectiveDateString()
$certIssuer = $req.ServicePoint.Certificate.GetIssuerName()
if ($certExpiresIn -gt $minimumCertAgeDays)
{
Write-Host Cert for site $url expires in $certExpiresIn days [on $expiration] -f Green
}
else
{
Write-Host WARNING: Cert for site $url expires in $certExpiresIn days [on $expiration] -f Red
Write-Host Threshold is $minimumCertAgeDays days. Check details:`nCert name: $certName -f Red
Write-Host Cert public key: $certPublicKeyString -f Red
Write-Host Cert serial number: $certSerialNumber`nCert thumbprint: $certThumbprint`nCert effective date: $certEffectiveDate`nCert issuer: $certIssuer -f Red
}
Write-Host
rv req
rv expiration
rv certExpiresIn
}
https://stackoverflow.com/questions/39253055/powershell-script-to-get-certificate-expiry-for-a-website-remotely-for-multiple