Actuellement, le certificat SSL du serveur que j'ai en privé est défini avec Let's Encrypt.
Let's Encrypt vous informera par e-mail de la date d'expiration du certificat, mais s'il s'agit d'un e-mail, il peut être enterré avec d'autres e-mails et une omission de confirmation peut se produire.
** Si vous le mettez à jour automatiquement, oui! Je pense qu'il y a quelque chose comme **, mais cette fois je vais l'ignorer
AWS
https://github.com/nnsnodnb/slackbot_ssl_expiration
«Applications et intégrations» doit être défini sur «Bots»

requirements.txt
appdirs==1.4.3
packaging==16.8
pyparsing==2.2.0
requests==2.13.0
six==1.10.0
slacker==0.9.42
bot.py
from slacker import Slacker
import datetime
import socket
import ssl
import slack_settings #Slack dans le même répertoire_settings.Placer py
slack = Slacker(slack_settings.SLACK_API_TOKEN)
def ssl_valid_time_remaining(hostname):
    expires = ssl_expiry_datetime(hostname)
    return expires - datetime.datetime.utcnow()
def ssl_expires_in(hostname, buffer_days=7):  #Date limite succursale 7 jours à l'avance
    remaining = ssl_valid_time_remaining(hostname)
    if remaining < datetime.timedelta(days=0):
        raise AlreadyExpired("Cert expired %s days ago" % remaining.days)
    elif remaining < datetime.timedelta(days=buffer_days):
        return True
    else:
        return False
def ssl_expiry_datetime(hostname):
    ssl_date_fmt = r'%b %d %H:%M:%S %Y %Z'
    context = ssl.create_default_context()
    conn = context.wrap_socket(
            socket.socket(socket.AF_INET),
            server_hostname=hostname,
    )
    conn.settimeout(3.0)
    conn.connect((hostname, 443))
    ssl_info = conn.getpeercert()
    return datetime.datetime.strptime(ssl_info['notAfter'], ssl_date_fmt)  # ssl_info['notAfter']Est la date d'expiration du certificat
def post_slack(hostname):
    message = '@channel https://' + hostname + ' '
    if ssl_expires_in(hostname):
        message += 'Il est temps de se débarrasser de'
    else:
        message += 'Est toujours dans le délai' 
    #Les méthodes ici utilisent le package slacker
    slack.chat.post_message(
            '#expiration',
            message,
            as_user=True,
            link_names=True
    )
def execute(event, context):
    post_slack('<YOUR DOMAIN>')
slack_setting.py
SLACK_API_TOKEN = ''
$ python bot.py

Cette fois encore, M. Yo Watanabe était en charge de la notification.

Réglez comme vous le souhaitez. J'ai sélectionné le paramètre pour être notifié à 2h00 du lundi au vendredi avec cron.bot.execute pour handlerDans l'environnement local, les commandes suivantes, etc. sont assez bonnes,
Environnement local
$ pip install -r requirements.txt
Étant donné que la bibliothèque n'est pas reconnue sur AWS Lambda, vous devez télécharger la bibliothèque externe entière.
Enregistrez la bibliothèque externe dans le répertoire du projet
$ pip install <LIBRARY_NAME> -t .
Si vous faites quelque chose comme ça, il sera enregistré dans le répertoire du projet. Cependant, il est difficile de le faire un par un, alors j'ai fait ce qui suit.
$ pip freeze > requirements.txt  # requirements.Sans txt
$ pip install -r requirements.txt -t .
Puis compresser et télécharger
$ zip -r bot.zip *  # bot.zip est votre nom préféré
Puisque bot.zip est créé dans le répertoire du projet, sélectionnez Télécharger fichier .ZIP pour télécharger bot.zip`.

Si les paramètres sont corrects, Slack sera averti à l'heure définie! Dans mon environnement, M. Yo Watanabe vous informera du «lundi au vendredi 2h00» comme mentionné ci-dessus! !!
Recommended Posts