Wiki Ubuntu-it

Indice
Partecipa
FAQ
Wiki Blog
------------------
Ubuntu-it.org
Forum
Chiedi
Chat
Cerca
Planet
  • Pagina non alterabile
  • Informazioni
  • Allegati
  • Differenze per "Sicurezza/CertificatiX509"
Differenze tra le versioni 1 e 2
Versione 1 del 25/09/2007 08.45.10
Dimensione: 10060
Commento:
Versione 2 del 25/09/2007 08.56.01
Dimensione: 9562
Commento: ristretta intro, iniziata revisione
Le cancellazioni sono segnalate in questo modo. Le aggiunte sono segnalate in questo modo.
Linea 8: Linea 8:
La raccomandazione '''ITU-T X.509''', appartenente alla serie di raccomandazioni '''X.500''', definisce una infrastruttura a chiave pubblica ('''PKI''') che ha lo scopo di fornire servizi di autenticazione. E' uno standard di fondamentale importanza, in quanto la struttura di certificati, che da esso deriva, e gli algoritmi di autenticazione sono utilizzati in moltissimi contesti.
Linea 12: Linea 10:
= Certificati =

Il cuore del meccanismo '''X.509''' sono i certificati a chiave pubblica. Essi vengono rilasciati da una [http://it.wikipedia.org/wiki/Certificate_authority Certification Authority] ed hanno lo scopo di certificare l'appartenenza di una chiave pubblica ad un particolare ''Nome Distintivo'' (''Distinguished Name'') oppure ad un ''Nome Alternativo'' (''Alternative Name'') 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 Certification Authority] viene definito ''root certificate''. Esso viene firmato dalla stessa authority (certificato ''self-signed''). Una violazione del ''root certificate'' comprometterebbe l'intero sistema.

Esistono diverse [http://it.wikipedia.org/wiki/Certificate_authority Certification Authority] universalmente riconosciute, ma ogni azienda può crearne una propria da utilizzare privatamente al suo interno.

== Struttura dei certificati ==
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 =

BR

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

Immagine(Icone/Piccole/warning.png,,center)

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


CategorySicurezza