Автор Тема: Как мониторить внешний сертификат изнутри сети, если...  (Прочитано 378 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Retif

  • Администраторы
  • Олдфаг
  • *****
  • Сообщений: 8732
  • Рейтинг: 86
  • Пол: Мужской
  • Афтар
    • Просмотр профиля
    • Мой блог
  • Откуда: Орёл
Есть сервис, представляется внутри локалки и снаружи. Например 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-запроса вытащить сертификат и дату его окончания?
« Последнее редактирование: 13 Ноября 2020, 12:44:39 от Retif »

Оффлайн Flyer_SPb

  • Модераторы
  • Старожил
  • *****
  • Сообщений: 971
  • Рейтинг: 26
  • Пол: Мужской
  • Ветеран войны с Kilrathi
    • Просмотр профиля
  • Откуда: 2:5030
как в принципе в повершелле из HTTP-запроса вытащить сертификат и дату его окончания?
Я бы попробовал через openssl s_client и openssl x509
They stole my gun, my beautiful Steltek gun!

Оффлайн DedMagarbI4

  • Ветеран
  • *****
  • Сообщений: 1820
  • Рейтинг: 11
  • Пол: Мужской
    • Просмотр профиля
  • Откуда: г.Невинномысск
excel для чего придумали? в нем и веди список с датой сертов :D

Оффлайн sirarthur

  • Старожил
  • ****
  • Сообщений: 572
  • Рейтинг: 5
  • Пол: Мужской
    • Просмотр профиля
  • Откуда: sub-MSK
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