Come verificare la validità di un certificato HTTPS in Python – Check HTTPS in Python
Con un semplice script python è possibile verificare la validità del certificato SSL per uno specifico host. La lista del materiale occorrente comprende una versione di Python aggiornata, in questa guida si farà riferimento alla 3.8 e i seguenti moduli, installabili via pip:
- pyopenssl
- idna
- cryptography
Per prima cosa bisogna creare un socket che si connetta all’host da esaminare:
socket = socket()
socket.connect(('esempio.com', 443))
si crea ora il context SSL passando come parametro la versione SSL, utilizzeremo la versione SSLv3 che è una delle più comuni, se ciò non dovesse funzionare a questo link troverete una lista dei parametri da poter dare in ingresso.
cntx = SSL.Context(SSL.SSLv23_METHOD)
diamo istruzioni per stabilire una secure socket connection
sock_ssl = SSL.Connection(ctx, sock)
sock_ssl.set_connect_state()
sock_ssl.set_tlsext_host_name(idna.encode('esempio.com'))
sock_ssl.do_handshake()
idna.encode('esempio.com')
codifica in Punycode l’argomento che gli si passa, in questo caso esempio.com.
esegue l’SSL handshake.
do_handshake()
Si deve ora recuperare il certificato crtf = sock_ssl.get_peer_certificate()
e accedere alle informazione di questo, decrittografandolo e rendendolo human readible: dcrpt_crtf =crtf.to_cryptography()
Si possono estrapolare tutte le informazioni dal certificato:
- Subject Alternate Name (SAN) :
dcrpt.extensions.get_extension_for_class(x509.SubjectAlternativeName)
- Common Name (CN) :
dcrpt.subject.get_attributes_for_oid(NameOID.COMMON_NAME)
- Issuer :
dcrpt.issuer.get_attributes_for_oid(NameOID.COMMON_NAME)
Gli issuer sono le autorità dalle quali si possono ottenere certificati x509, Let’s Encrypt ad esempio è un issuer.
Un altro metodo per verificare un certificato SSL è quello di usare urllib3, per installarlo:
pip install urllib3
e poi:
import urllib3
http = urllib3.PoolManager()
http.request('GET', 'https://dominio_da_verificare')
se il certificato è valido si otterrà un output del genere <urllib3.response.HTTPResponse object at 0x7fd3ca5da580>, simile all’output di sock_ssl.get_peer_certificate().
Se non è valido otterremo un’eccezione del tipo urllib3.exceptions.SSLError.
Geolocalizzare un IP in Python
La localizzazione geografica di un indirizzo IP in python è alquanto semplice, è necessaria l’installazione del solo modulo requests.
Utilizzeremo l’API
https://geolocation-db.com/json/
e quindi:
response = requests.get("https://geolocation-db.com/json/indirizzoIP&position=true").json()
Ovviamente al posto di indirizzoIP, va inserito un indirizzo. Si otterrà un json con le informazioni richieste
{‘country_code’: ‘IT’, ‘country_name’: ‘Italy’, ‘city’: ‘Roma’, ‘postal’: ‘ 00118‘, ‘latitude’: 41.9028, ‘longitude’: 12.4964, ‘IPv4’: ‘indirizzoIP’, ‘state’: ‘Provincia di Roma’}
Pingare un sito in python
il modo più veloce per effettuare un ping usando il linguaggio python è installare pythonping.
Fatto ciò, non rimane che importarlo e lanciarlo, pingando un sito:
from pythonping import ping
ping('sito.com')
questo restituirà una liste con le risposte, contenti il pacchetto ricevuto e altre meta informazioni.
Un altro modo è quello di usare i comandi del sistema operativo da uno script python:
import os
os.system(f"ping -c 1 -w2 'sito_da_pingare.com' > /dev/null 2>&1 ")
se usate Linux
os.system(f"ping -n 1 -w2 'sito_da_pingare.com' > /dev/null 2>&1 ")
se usate Windows
👇 Contenuti da non perdere 👇
- intelligenza artificiale 👁
- Reti 💻
- Sicurezza & Privacy 👁
- Spiegoni artificiali 🎓
- Svago 🎈
- 💬 Il nostro canale Telegram: iscriviti
- 🔵 Come cercare nei file via SSH
- 🟠 Anche Skype può essere soggetto a malware ed attacchi informatici
- 🟠 WannaCry (ransomware): tutto quello che c’è da sapere in 9 punti