Форум системных администраторов

IT => Windows => Тема начата: Retif от 13 ноября 2020, 11:51:49

Название: Как мониторить внешний сертификат изнутри сети, если...
Отправлено: Retif от 13 ноября 2020, 11:51:49
Есть сервис, представляется внутри локалки и снаружи. Например 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-запроса вытащить сертификат и дату его окончания?
Название: Как мониторить внешний сертификат изнутри сети, если...
Отправлено: Flyer_SPb от 23 ноября 2020, 18:39:23
как в принципе в повершелле из HTTP-запроса вытащить сертификат и дату его окончания?
Я бы попробовал через openssl s_client и openssl x509
Название: Как мониторить внешний сертификат изнутри сети, если...
Отправлено: DedMagarbI4 от 24 ноября 2020, 19:55:56
excel для чего придумали? в нем и веди список с датой сертов :D
Название: Как мониторить внешний сертификат изнутри сети, если...
Отправлено: sirarthur от 25 ноября 2020, 09:46:18
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