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.
cron
.bot.execute
pour handler
Dans 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