IndiceBR TableOfContents(1) |
Introduzione
X.509 si basa sulla [http://it.wikipedia.org/wiki/Crittografia_asimmetrica crittografia a chiave pubblica] e sul concetto di [http://it.wikipedia.org/wiki/Firma_digitale firma digitale].
Il cuore del meccanismo X.509 sono i certificati a chiave pubblica. Essi vengono rilasciati da una [http://it.wikipedia.org/wiki/Certificate_authority autorità per la certificazione] ed hanno lo scopo di certificare l'appartenenza di una chiave pubblica ad un particolare «Nome Distintivo» oppure ad un «Nome Alternativo» come potrebbe essere un indirizzo e-mail o un record DNS. Una infrastruttura PKI è strutturata gerarchicamente da più CA al cui vertice si trova una CA root che certifica le sub-CA.
Il certificato appartenente alla [http://it.wikipedia.org/wiki/Certificate_authority autorità] viene definito certificato root. Una violazione di tale certificato, autofirmato dalla stessa autorità, comprometterebbe l'intero sistema.
Esistono diverse [http://it.wikipedia.org/wiki/Certificate_authority autorità per la certificazione] universalmente riconosciute, ma ogni azienda può crearne una propria da utilizzare privatamente al suo interno.
Struttura dei certificati
La struttura di un certificato digitale X.509 v3 è la seguente:
- Certificato
- Versione
- Numero seriale
- ID dell'algoritmo
- Ente emettitore
- Validità
- Non prima
- Non dopo
- Soggetto
- Informazioni sulla chiave pubblica del soggetto
- Algoritmo per l'utilizzo della chiave pubblica
- Chiave pubblica
- Codice identificativo univoco dell'emittente (facoltativo)
- Codice identificativo univoco del soggetto (facoltativo)
- Estensioni (facoltativo)
- ...
- Algoritmo di firma del certificato
- Firma del certificato
Il seguente è un esempio di certificato:
Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: md5WithRSAEncryption Issuer: C=DE, ST=NRW, L=Steinfurt, O=Spenneberg.com, CN=RootCA 2003/Email=ralf@spenneberg.net Validity Not Before: Apr 30 06:08:56 2003 GMT Not After : Apr 29 06:08:56 2004 GMT Subject: C=DE, ST=NRW, L=Steinfurt, O=Spenneberg.com, CN=VPN-Gateway/Email=ralf@spenneberg.net Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:c5:3b:9c:36:3a:19:6c:a9:f2:ba:e9:d2:ed:84: 33:36:48:07:b2:a3:2d:59:92:b0:86:4c:81:2c:ea: 5c:ed:f3:ba:eb:17:4e:b3:3a:cc:b7:5b:5d:ca:b3: 04:ed:fb:59:3c:c5:25:3e:f3:ff:b0:22:10:fb:de: 72:0a:ee:42:4b:9a:d3:27:d3:b6:fb:e9:88:10:c8: 47:b7:26:4f:71:40:e4:75:c4:c0:ee:6b:87:b8:6f: c9:5e:66:cf:bb:e7:ad:72:68:b8:6d:fd:8f:4c:1f: 3a:a2:0d:43:25:06:b9:92:e7:20:6c:86:15:a0:eb: 7f:f7:0b:9a:99:5d:14:88:9b Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: CB:5C:19:9B:E6:8A:8A:FE:0E:C4:FD:5E:DF:F7:BF:3D:A8: 18:7C:08 X509v3 Authority Key Identifier: keyid:01:BB:C6:33:BE:F5:9A:5E:B0:0C:5D:BD:41:E9:78: 6C:54:AD:66:8E DirName:/C=DE/ST=NRW/L=Steinfurt/O=Spenneberg.com/ CN=RootCA 2003/Email=ralf@spenneberg.net serial:00 Signature Algorithm: md5WithRSAEncryption 6f:89:2b:95:af:f1:8d:4d:b7:df:e8:6d:f7:92:fb:48:8c:c4: 1a:43:68:65:97:01:87:a6:84:b5:a1:38:bd:62:74:70:db:9e: 78:19:d9:0c:af:18:ad:13:77:56:7d:3f:19:61:da:ba:74:30: 8e:c5:50:0e:e3:eb:ff:95:cd:8d:d6:7e:c3:0e:ab:5b:34:94: bc:16:0f:ef:dc:de:40:bb:7d:ba:a2:b8:5d:f9:74:e7:28:58: 75:a0:66:d2:8d:85:ba:38:82:08:10:33:ef:be:29:c9:31:9d: 63:a9:f7:e0:99:ea:a7:ed:b6:b5:33:1b:1c:4a:a4:05:40:6e: 40:7b -----BEGIN CERTIFICATE----- MIIDjDCCAvWgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBgjELMAkGA1UEBhMCREUx DDAKBgNVBAgTA05SVzESMBAGA1UEBxMJU3RlaW5mdXJ0MRcwFQYDVQQKEw5TcGVu bmViZXJnLmNvbTEUMBIGA1UEAxMLUm9vdENBIDIwMDMxIjAgBgkqhkiG9w0BCQEW E3JhbGZAc3Blbm5lYmVyZy5uZXQwHhcNMDMwNDMwMDYwODU2WhcNMDQwNDI5MDYw ODU2WjCBgjELMAkGA1UEBhMCREUxDDAKBgNVBAgTA05SVzESMBAGA1UEBxMJU3Rl aW5mdXJ0MRcwFQYDVQQKEw5TcGVubmViZXJnLmNvbTEUMBIGA1UEAxMLVlBOLUdh dGV3YXkxIjAgBgkqhkiG9w0BCQEWE3JhbGZAc3Blbm5lYmVyZy5uZXQwgZ8wDQYJ KoZIhvcNAQEBBQADgY0AMIGJAoGBAMU7nDY6GWyp8rrp0u2EMzZIB7KjLVmSsIZM gSzqXO3zuusXTrM6zLdbXcqzBO37WTzFJT7z/7AiEPvecgruQkua0yfTtvvpiBDI R7cmT3FA5HXEwO5rh7hvyV5mz7vnrXJouG39j0wfOqINQyUGuZLnIGyGFaDrf/cL mpldFIibAgMBAAGjggEOMIIBCjAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1P cGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUy1wZm+aKiv4O xP1e3/e/PagYfAgwga8GA1UdIwSBpzCBpIAUAbvGM771ml6wDF29Qel4bFStZo6h gYikgYUwgYIxCzAJBgNVBAYTAkRFMQwwCgYDVQQIEwNOUlcxEjAQBgNVBAcTCVN0 ZWluZnVydDEXMBUGA1UEChMOU3Blbm5lYmVyZy5jb20xFDASBgNVBAMTC1Jvb3RD QSAyMDAzMSIwIAYJKoZIhvcNAQkBFhNyYWxmQHNwZW5uZWJlcmcubmV0ggEAMA0G CSqGSIb3DQEBBAUAA4GBAG+JK5Wv8Y1Nt9/obfeS+0iMxBpDaGWXAYemhLWhOL1i dHDbnngZ2QyvGK0Td1Z9Pxlh2rp0MI7FUA7j6/+VzY3WfsMOq1s0lLwWD+/c3kC7 fbqiuF35dOcoWHWgZtKNhbo4gggQM+++KckxnWOp9+CZ6qfttrUzGxxKpAVAbkB7 -----END CERTIFICATE-----
Creare una Certification Authority con Openssl
Openssl è un toolkit di sviluppo per [http://it.wikipedia.org/wiki/Secure_Sockets_Layer SSL/TLS].E' presente nei [:Repository:repository] ufficiali e può essere utilizzato per creare una propria Certification Authority.
Creare una directory (es: rootCA) con le seguenti sottodirectory: certs crl newcerts private.
mkdir rootCA cd rootCA mkdir certs crl newcerts private
Crare i file index.txt e serial (quest'ultimo da inizializzare con il valore "00")
touch index.txt echo "00" > serial
Copiare il file di configurazione /etc/ssl/openssl.cnf nella directory corrente:
cp /etc/ssl/openssl.cnf .
aprire il file appena copiato con un [:EditorDiTesto:editor di testo] e modificare le direttive come nel seguente esempio:
[ CA_default ] dir = . ... [ req_distinguished_name ] countryName = Country Name (2 letter code) countryName_default = IT countryName_min = 2 countryName_max = 2 stateOrProvinceName = State or Province Name (full name) stateOrProvinceName_default = Milano localityName = Locality Name (eg, city) localityName_default = Milano 0.organizationName = Organization Name (eg, company) 0.organizationName_default = Ubuntu Italian Community organizationalUnitName = Organizational Unit Name (eg, section) organizationalUnitName_default = Consiglio
personalizzando opportunamente le direttive: countryName_default stateOrProvinceName_default 0.organizationName_default organizationalUnitName_defaul
Generare la richiesta di certificato self-signed della CA (file: rootCAcert.pem) con la rispettiva chiave privata (file private/rootCAkey.pem). Tale richiesta sarà firmata dalla stessa CA e produrrà il certificato. Sarà necessario scegliere una passphrase per proteggere la chiave privata e un Common Name significativo (es. Ubuntu Italian Community Root CA)
openssl req -config openssl.cnf -new -x509 -keyout private/rootCAkey.pem -out rootCAcert.pem -days 365
E' possibile verificare rispettivamente il contenuto del certificato e della chiave privata appena generati con
openssl x509 -in rootCAcert.pem -text openssl rsa -in private/rootCAkey.pem -text
Una violazione del certificato o della chiave privata appena generati comprometterebbe la sicurezza dell'intera infrastruttura |
Creare certificati utenti
Creare una directory per contenere i certificati degli utenti
mkdir utenti cd utenti
Generare la richiesta di certificato per l'utente (da associare al Common Name).
openssl req -config ../openssl.cnf -new -keyout utentekey.pem -out utentereq.pem
Firmare la richiesta con la chiave privata dell'authority:
cd .. openssl ca -config openssl.cnf -policy policy_anything -cert rootCAcert.pem -keyfile private/rootCAkey.pem -out utenti/utentecert.pem -infiles utenti/utentereq.pem
Ulteriori risorse
[http://www.itu.int/rec/T-REC-X.509/en ITU-X Recommendation X.509 : Information technology - Open Systems Interconnection - The Directory: Public-key and attribute certificate frameworks]
[http://telematics.poliba.it/boggia/security/laboratorio.zip Laboratorio di Metodi e sistemi per la sicurezza delle reti - Politecnico di Bari]
[http://www.cacert.org/ CACert]
[https://www.thawte.com/ Thawte]
[https://www.verisign.com/ Verisign]