====== Formati disponibili dei vari certificati TLS e utility ====== ===== 1. PEM (Privacy Enhanced Mail) ===== * Estensioni: .pem, .crt, .cer, .key * Codifica: Base64 ASCII * Contenuti: Può includere certificati, chiavi private e catene di certificati. * Utilizzo: Comunemente usato in ambienti Unix/Linux. Facile da leggere e modificare con un editor di testo. ===== 2. DER (Distinguished Encoding Rules) ===== * Estensioni: .der, .cer * Codifica: Binaria * Contenuti: Tipicamente contiene un singolo certificato. * Utilizzo: Comunemente usato in ambienti Windows. Non leggibile dall'uomo. ===== 3. PKCS#7 ===== * Estensioni: .p7b, .p7s * Codifica: Base64 ASCII o Binaria * Contenuti: Certificati e catene di certificati, ma non chiavi private. * Utilizzo: Usato per lo scambio di certificati. Comunemente visto in ambienti Windows. ===== 4. PKCS#12 ===== (è possibile utilizzare il tool messo a disposizione da Harica per generare questo formato) * Estensioni: .p12, .pfx * Codifica: Binaria * Contenuti: Certificati, chiavi private e catene di certificati. * Utilizzo: Usato per memorizzare più oggetti crittografici in un unico file. Comunemente usato per importare/esportare certificati e chiavi tra sistemi. ====== Tabella Riassuntiva ====== ^ Formato ^ Estensioni | Codifica | Contenuti | Utilizzo | | PEM | .pem, .crt, .cer, .key | Base64 ASCII | Certificati, chiavi private, catene di certificati | Ambienti Unix/Linux, leggibile dall'uomo | | DER | .der, .cer | Binaria | Singolo certificato | Ambienti Windows, non leggibile dall'uomo | | PKCS#7 | .p7b, .p7s | Base64 ASCII o Binaria | Certificati, catene di certificati | Scambio di certificati, ambienti Windows | | PKCS#12 | .p12, .pfx | Binaria | Certificati, chiavi private, catene di certificati | Importazione/esportazione tra sistemi, memorizzazione di più oggetti crittografici | ====== Conversione dei formati ====== ===== Generazione del formato PKCS#12 ===== E' possibile avvalersi del tool grafico via web messo a disposizione da HARICA a questo indirizzo: https://www.harica.gr/en/Tools/PemToP12 In input saranno necessari il certificato in formato (.pem), la chiave privata in formato (.pem), la password che crittografa la chiave privata ed infine il file PEM bundle in formato (.pem) Con il programma openssl da terminale Linux è possibile convertire dal formato PEM al formato PKCS#12 con il seguente comando: openssl pkcs12 -export -out certificate.pfx -inkey private.key -in certificate.crt -certfile ca_bundle.crt Enter pass phrase for private.key: Enter Export Password: Verifying - Enter Export Password: ====== Generazione chiave privata e CSR ====== HARICA mette a disposizione un tool grafico via web per generare chiavi private e CSR https://www.harica.gr/en/Tools/KeyGeneration E' altresì possibile creare le chiavi con il comando openssl su terminale Linux. Raccomandiamo le seguenti best practice: 1. Utilizzare Algoritmi Forti RSA: Utilizzare una dimensione della chiave di almeno 2048 bit, ma 4096 bit è raccomandato per una maggiore sicurezza. Curva Ellittica (EC): Utilizzare curve come prime256v1 o secp384r1 per una forte sicurezza. 2. Utilizzare Archiviazione Sicura delle Chiavi Moduli di Sicurezza Hardware (HSM): Archiviare le chiavi in HSM per sicurezza fisica. File System Locale: Assicurarsi che le chiavi siano archiviate in modo sicuro con permessi appropriati. 3. Crittografare le Chiavi Private Crittografia AES-256: Crittografare le chiavi private con algoritmi di crittografia forti. ===== Comandi per Generare Chiavi Private Sicure ===== ^ Tipo di Chiave ^ Dimensione | Comando | | RSA | 2048 | openssl genpkey -algorithm RSA -out rsa_2048.key -aes256 -pkeyopt rsa_keygen_bits:2048 | | RSA | 3072 | openssl genpkey -algorithm RSA -out rsa_3072.key -aes256 -pkeyopt rsa_keygen_bits:3072 | | RSA | 4096 | openssl genpkey -algorithm RSA -out rsa_4096.key -aes256 -pkeyopt rsa_keygen_bits:4096 | ^ Tipo di Chiave ^ Curva | Comando per Generare la Chiave | Comando per Crittografare la Chiave | | ECDSA | prime256v1 (256 bit) | openssl ecparam -name prime256v1 -genkey -noout -out ecdsa_256.key | openssl pkcs8 -topk8 -inform PEM -outform PEM -in ecdsa_256.key -out ecdsa_256_encrypted.key -v2 aes256 | | ECDSA | secp384r1 (384 bit) | openssl ecparam -name secp384r1 -genkey -noout -out ecdsa_384.key | openssl pkcs8 -topk8 -inform PEM -outform PEM -in ecdsa_384.key -out ecdsa_384_encrypted.key -v2 aes256 | ===== Comandi per Generare la CSR a partire dalle chiavi private ===== | Tipo di Chiave | Curva/Dimensione ^ Comando per Generare la CSR ^ | RSA | 2048 bit | openssl req -new -key rsa_2048.key -out rsa_2048.csr | | RSA | 3072 bit | openssl req -new -key rsa_3072.key -out rsa_3072.csr | | RSA | 4096 bit | openssl req -new -key rsa_4096.key -out rsa_4096.csr | | ECDSA | prime256v1 (256 bit) | openssl req -new -key ecdsa_256_encrypted.key -out ecdsa_256.csr | | ECDSA | secp384r1 (384 bit) | openssl req -new -key ecdsa_384_encrypted.key -out ecdsa_384.csr | ====== Altri comandi utili da terminale con openssl ====== ===== Leggere da un file contenente una catena di certificati (bundle) ===== Output breve:\\ openssl crl2pkcs7 -nocrl -certfile .pem | openssl pkcs7 -print_certs -noout Output esteso:\\ openssl crl2pkcs7 -nocrl -certfile .pem | openssl pkcs7 -print_certs -text -noout ===== Verificare corrispondenza chiave privata - certificato - CSR ===== Estrarre ed effettuare l'hash della chiave pubblica a partire dalla chiave privata:\\ openssl rsa -noout -modulus -in server.key | openssl md5 Dal certificato:\\ openssl x509 -noout -modulus -in server.crt | openssl md5 Dal CSR:\\ openssl req -noout -modulus -in server.csr | openssl md5 Gli hash devono essere uguali in tutti i tre casi. ===== Chiave privata protetta da password ===== Durante il wizard per la creazione del CSR viene generata la chiave privata, protetta da password e dunque cifrata. Se si desidera utilizzare la chiave privata in sistemi che non prevedono la decifratura, è possibile eliminare la cifratura con il seguente comando: openssl rsa -in encrypted_key.pem -out decrypted_key.pem