#format wiki
#LANGUAGE it
<
>
<>
<>
= Introduzione =
'''X.509''' è uno standard ITU-T per [[http://it.wikipedia.org/wiki/Public_key_infrastructure|infrastrutture a chiave pubblica]].
Il cuore del meccanismo '''X.509''' sono i certificati. 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 autorità viene definito '''certificato root'''. Una violazione di tale certificato, ''autofirmato'' dalla stessa autorità, comprometterebbe l'intero sistema.
Esistono diverse 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-----
}}}
<>
= Installazione di OpenSSL =
Per installare '''OpenSSL''' è sufficiente installare il pacchetto ''openssl'' presente nei [[Repository|repository]] ufficiali.
= Creare una autorità per certificati con OpenSSL =
Prima di cominciare è necessario creare una cartella che conterrà tutte le informazioni relative all'autorità che si desidera creare. Aprire una finestra di terminale e digitare i seguenti comandi:
{{{
cd
mkdir rootCA
cd rootCA
mkdir certs crl newcerts private
cd rootCA
touch index.txt
echo "00" > serial
}}}
Copiare il file di configurazione `/etc/ssl/openssl.cnf` nella cartella corrente con il seguente comando:
{{{
cp /etc/ssl/openssl.cnf .
}}}
Aprire il file appena copiato con un [[Ufficio/EditorDiTesto|editor di testo]] e modificarlo 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
}}}
{{{#!wiki note
Le stringhe «countryName_default», «stateOrProvinceName_default» «0.organizationName_default» e «organizationalUnitName_defaul» possono essere personalizzare con dei valori più appropriati.}}}
Per generare la richiesta di certificato con la chiave privata residente in `private/rootCAkey.pem` è sufficiente digitare il seguente comando:
{{{
openssl req -config openssl.cnf -new -x509 -keyout private/rootCAkey.pem -out rootCAcert.pem -days 365
}}}
È possibile verificare il contenuto del certificato e della chiave privata appena generati con i seguenti comandi:
{{{
openssl x509 -in rootCAcert.pem -text
openssl rsa -in private/rootCAkey.pem -text
}}}
{{{#!wiki important
Una violazione del certificato o della chiave privata appena generati comprometterebbe la sicurezza dell'intera infrastruttura.}}}
= Creazione dei certificati degli utenti =
Creare una cartella per contenere i certificati degli utenti con il seguente comando in una finestra di terminale:
{{{
mkdir utenti
cd utenti
}}}
Generare la richiesta di certificato per ogni singolo utente con il seguente comando:
{{{
openssl req -config ../openssl.cnf -new -keyout utentekey.pem -out utentereq.pem
}}}
Infine, non resta che firmare la richiesta con la chiave privata dell'authority. Digitare il seguente comando:
{{{
cd ..
openssl ca -config openssl.cnf -policy policy_anything -cert rootCAcert.pem -keyfile private/rootCAkey.pem -out utenti/utentecert.pem -infiles utenti/utentereq.pem
}}}
{{{#!wiki note
I comandi sopra citati vanno adattati alle proprie esigenze.}}}
= Ulteriori risorse =
* [[http://www.itu.int/rec/T-REC-X.509/en|Public-key and attribute certificate frameworks]]
* [[http://telematics.poliba.it/boggia/security/laboratorio.zip|Laboratorio di Metodi e sistemi per la sicurezza delle reti]]
* [[http://www.cacert.org/|Sito ufficiale di CACert]]
* [[https://www.thawte.com/|Sito ufficiale di Thawte]]
* [[https://www.verisign.com/|Sito ufficiale di Verisign]]
* [[http://it.wikipedia.org/wiki/Firma_digitale|Voce enciclopedica di firma digitale]]
* [[http://it.wikipedia.org/wiki/Crittografia_asimmetrica|Voce enciclopedica di crittografia asimmetrica]]
----
CategorySicurezza CategoryDaRevisionare