Python: leggere i contenuti di un file CSR

Python: leggere i contenuti di un file CSR

In questo articolo vedremo come estrarre le informazioni più rilevanti da un file CSR con Python.

Per iniziare, dobbiamo installare il modulo pyOpenSSL che fornisce un'interfaccia e delle classi wrapper attorno alla libreria OpenSSL.

Quindi possiamo definire il seguente codice:

import OpenSSL.crypto
from OpenSSL.crypto import load_certificate_request, FILETYPE_PEM

def get_csr_file(csr_file=None):
    if csr_file is None or not os.path.exists(csr_file):
        return None
    with open(csr_file, 'r') as crt:
        return crt.read()


def get_csr_data(file=None):
    csr = get_csr_file(file)
    if csr is None:
        return None
    csr_request = load_certificate_request(FILETYPE_PEM, csr)
    pub_key = csr_request.get_pubkey()
    pub_key_type = 'RSA' if pub_key.type() == OpenSSL.crypto.TYPE_RSA else 'DSA'
    pub_key_size = pub_key.bits()
    subject = csr_request.get_subject()
    components = dict(subject.get_components())
    return {
        'key_type': pub_key_type,
        'key_size': pub_key_size,
        'attributes': components
    }

Leggiamo il contenuto del file CSR come stringa e lo passiamo, se esiste, alla funzione load_certificate_request() unitamente alla costante che specifica il tipo di certificato che vogliamo analizzare. Questa funzione restituisce un oggetto i cui metodi ci permettono di ricavare il tipo di chiave pubblica usata, la sua dimensione in byte e i dati contenuti negli attributi del certificato, come Country, State, il Common Name ed altri.

Possiamo utilizzare il nostro codice in questo modo:

def main():
    csr_data = get_csr_data('./test.csr')
    print(csr_data)


if __name__ == '__main__':
    main()

È da notare che i dati contenuti nel dizionario attributes vengono restituiti come byte, quindi occorrerà effettuare una conversione in stringa per poterli visualizzare in un'interfaccia Web.

Torna su