Amministratore Linux: crea certificati SSL
Sfondo TLS e SSL
TLS è il nuovo standard per la sicurezza del livello socket, che procede con SSL. TLS offre standard di crittografia migliori con altre funzionalità di protezione e wrapper di protocollo che migliorano SSL. Spesso i termini TLS e SSL vengono utilizzati in modo intercambiabile. Tuttavia, in qualità di amministratore CentOS professionale, è importante notare le differenze e la cronologia che li separano.
SSL va fino alla versione 3.0. SSL è stato sviluppato e promosso come standard industriale sotto Netscape. Dopo che Netscape è stato acquistato da AOL (un ISP popolare negli anni '90, altrimenti noto come America Online), AOL non ha mai veramente promosso il cambiamento necessario per i miglioramenti della sicurezza a SSL.
Alla versione 3.1, la tecnologia SSL è passata agli standard dei sistemi aperti ed è stata modificata in TLS . Poiché i diritti d'autore su SSL erano ancora di proprietà di AOL, è stato coniato un nuovo termine:TLS - Transport Layer Security. Quindi è importante riconoscere che TLS è in realtà diverso da SSL . Soprattutto, poiché le tecnologie SSL meno recenti hanno problemi di sicurezza noti e alcune sono considerate obsolete oggi.
Note- Questo tutorial utilizzerà il termine TLS quando si parla di tecnologie 3.1 e successive. Quindi SSL quando si commentano specifici per le tecnologie SSL 3.0 e precedenti.
Controllo delle versioni SSL vs TLS
La tabella seguente mostra come il controllo delle versioni TLS e SSL si relazionerebbero tra loro. Ho sentito alcune persone parlare in termini di SSL versione 3.2. Tuttavia, probabilmente hanno ottenuto la terminologia dalla lettura di un blog. In qualità di amministratore professionista, desideriamo sempre utilizzare la terminologia standard. Quindi, mentre si parla, SSL dovrebbe essere un riferimento alle tecnologie del passato. Le cose semplici possono far sembrare un cercatore di lavoro CentOS un CS Major esperto.
TLS | SSL |
---|---|
- | 3.0 |
1.0 | 3.1 |
1.1 | 3.2 |
1.2 | 3.3 |
TLS svolge due funzioni principali importanti per gli utenti di Internet oggi: Uno, verifica chi è una parte, nota comeauthentication. Due, offreend-to-end encryption a livello di trasporto per i protocolli di livello superiore che non dispongono di questa funzionalità nativa (ftp, http, protocolli di posta elettronica e altro).
Il primo, verifica chi è una parte ed è importante per la sicurezza come crittografia end-to-end. Se un consumatore dispone di una connessione crittografata a un sito Web non autorizzato a ricevere pagamenti, i dati finanziari sono ancora a rischio. Questo è ciò che ogni sito di phishing non avrà:a properly signed TLS certificate verifying website operators are who they claim to be from a trusted CA.
Esistono solo due metodi per aggirare la mancanza di un certificato firmato correttamente: indurre l'utente a consentire la fiducia di un browser Web per un certificato autofirmato o sperare che l'utente non sia esperto di tecnologia e non conoscerà l'importanza di un certificato affidabile Autorità (o CA).
In questo tutorial, useremo quello che è conosciuto come un auto-firmato il certificato. Ciò significa che, senza fornire esplicitamente a questo certificato lo stato di attendibile in ogni browser Web che visita il sito Web, verrà visualizzato un errore che scoraggia gli utenti dal visitare il sito. Quindi, farà saltare all'utente alcune azioni prima di accedere a un sito con un certificato autofirmato. Ricorda, per motivi di sicurezza, che questa è una buona cosa.
Installa e configura openssl
openssl è lo standard per le implementazioni open source di TLS. openssl è utilizzato su sistemi come Linux, distribuzioni BSD, OS X e supporta anche Windows.
openssl è importante, poiché fornisce sicurezza a livello di trasporto e astrae la programmazione dettagliata dell'autenticazione e della crittografia end-to-end per uno sviluppatore. Questo è il motivo per cui openssl viene utilizzato con quasi tutte le singole applicazioni open source che utilizzano TLS. Inoltre è installato di default su ogni versione moderna di Linux.
Per impostazione predefinita, openssl dovrebbe essere installato su CentOS almeno dalla versione 5 in poi. Per sicurezza, proviamo a installare openssl tramite YUM. Basta eseguire l'installazione, poiché YUM è abbastanza intelligente da farci sapere se un pacchetto è già installato. Se stiamo eseguendo una versione precedente di CentOS per motivi di compatibilità, eseguire un'installazione yum -y assicurerà che openssl venga aggiornato contro la vulnerabilità semi-recente heart-bleed.
Durante l'esecuzione del programma di installazione, è stato riscontrato che in realtà c'era un aggiornamento a openssl .
[[email protected]]# yum -y install openssl
Resolving Dependencies
--> Running transaction check
---> Package openssl.x86_64 1:1.0.1e-60.el7 will be updated
---> Package openssl.x86_64 1:1.0.1e-60.el7_3.1 will be an update
--> Processing Dependency: openssl-libs(x86-64) = 1:1.0.1e-60.el7_3.1 for
package: 1:openssl-1.0.1e-60.el7_3.1.x86_64
--> Running transaction check
---> Package openssl-libs.x86_64 1:1.0.1e-60.el7 will be updated
---> Package openssl-libs.x86_64 1:1.0.1e-60.el7_3.1 will be an update
--> Finished Dependency Resolution
Dependencies Resolved
===============================================================================
===============================================================================
Package Arch
Version Repository Size
===============================================================================
===============================================================================
Updating:
openssl x86_64
1:1.0.1e-60.el7_3.1 updates 713 k
Updating for dependencies:
Crea certificato autofirmato per OpenLDAP
Questo è un metodo per creare un auto-firmato per la nostra precedente installazione di OpenLDAP .
Per creare un certificato OpenLDAP autofirmato.
openssl req -new -x509 -nodes -out /etc/openldap/certs/myldaplocal.pem -keyout
/etc/openldap/certs/myldaplocal.pem -days 365
[[email protected]]# openssl req -new -x509 -nodes -out /etc/openldap/certs/vmnet.pem
-keyout /etc/openldap/certs/vmnet.pem -days 365
Generating a 2048 bit RSA private key
.............................................+++
................................................+++
writing new private key to '/etc/openldap/certs/vmnet.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:Califonia
Locality Name (eg, city) [Default City]:LA
Organization Name (eg, company) [Default Company Ltd]:vmnet
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:centos
Email Address []:[email protected]
[[email protected]]#
Ora i nostri certificati OpenLDAP dovrebbero essere inseriti in / etc / openldap / certs /
[[email protected]]# ls /etc/openldap/certs/*.pem
/etc/openldap/certs/vmnetcert.pem /etc/openldap/certs/vmnetkey.pem
[[email protected]]#
Come puoi vedere, abbiamo sia il certificato che la chiave installati nelle directory / etc / openldap / certs / . Infine, dobbiamo modificare le autorizzazioni per ciascuno, poiché sono attualmente di proprietà dell'utente root.
[[email protected]]# chown -R ldap:ldap /etc/openldap/certs/*.pem
[[email protected]]# ls -ld /etc/openldap/certs/*.pem
-rw-r--r--. 1 ldap ldap 1395 Feb 20 10:00 /etc/openldap/certs/vmnetcert.pem
-rw-r--r--. 1 ldap ldap 1704 Feb 20 10:00 /etc/openldap/certs/vmnetkey.pem
[[email protected]]#
Crea certificato autofirmato per il server Web Apache
In questo tutorial, supporremo che Apache sia già installato. Abbiamo installato Apache in un altro tutorial (configurazione di CentOS Firewall) e andremo all'installazione avanzata di Apache per un futuro tutorial. Quindi, se non hai già installato Apache, segui.
Una volta che Apache HTTPd può essere installato utilizzando i seguenti passaggi:
Step 1 - Installa mod_ssl per il server httpd Apache.
Per prima cosa dobbiamo configurare Apache con mod_ssl. Usare il gestore di pacchetti YUM è piuttosto semplice -
[[email protected]]# yum -y install mod_ssl
Quindi ricarica il tuo demone Apache per assicurarti che Apache utilizzi la nuova configurazione.
[[email protected]]# systemctl reload httpd
A questo punto, Apache è configurato per supportare le connessioni TLS sull'host locale.
Step 2 - Crea il certificato SSL autofirmato.
Per prima cosa, configuriamo la nostra directory delle chiavi TLS private.
[[email protected]]# mkdir /etc/ssl/private
[[email protected]]# chmod 700 /etc/ssl/private/
Note- Assicurati che solo la root abbia accesso in lettura / scrittura a questa directory. Con l'accesso in lettura / scrittura mondiale, la tua chiave privata può essere utilizzata per decrittografare il traffico rilevato.
Generazione del certificato e dei file chiave.
[[email protected]]# sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout
/etc/ssl/private/self-gen-apache.key -out /etc/ssl/certs/self-sign-apache.crt
Generating a 2048 bit RSA private key
..........+++
....+++
-----
Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:xx
Locality Name (eg, city) [Default City]:xxxx
Organization Name (eg, company) [Default Company Ltd]:VMNET
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:centos.vmnet.local
Email Address []:
[[email protected]]#
Note - Puoi utilizzare l'indirizzo IP pubblico del server se non hai un nome di dominio registrato.
Diamo un'occhiata al nostro certificato -
[[email protected]]# openssl x509 -in self-sign-apache.crt -text -noout
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 17620849408802622302 (0xf489d52d94550b5e)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=US, ST=UT, L=xxxx, O=VMNET, CN=centos.vmnet.local
Validity
Not Before: Feb 24 07:07:55 2017 GMT
Not After : Feb 24 07:07:55 2018 GMT
Subject: C=US, ST=UT, L=xxxx, O=VMNET, CN=centos.vmnet.local
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:c1:74:3e:fc:03:ca:06:95:8d:3a:0b:7e:1a:56:
f3:8d:de:c4:7e:ee:f9:fa:79:82:bf:db:a9:6d:2a:
57:e5:4c:31:83:cf:92:c4:e7:16:57:59:02:9e:38:
47:00:cd:b8:31:b8:34:55:1c:a3:5d:cd:b4:8c:b0:
66:0c:0c:81:8b:7e:65:26:50:9d:b7:ab:78:95:a5:
31:5e:87:81:cd:43:fc:4d:00:47:5e:06:d0:cb:71:
9b:2a:ab:f0:90:ce:81:45:0d:ae:a8:84:80:c5:0e:
79:8a:c1:9b:f4:38:5d:9e:94:4e:3a:3f:bd:cc:89:
e5:96:4a:44:f5:3d:13:20:3d:6a:c6:4d:91:be:aa:
ef:2e:d5:81:ea:82:c6:09:4f:40:74:c1:b1:37:6c:
ff:50:08:dc:c8:f0:67:75:12:ab:cd:8d:3e:7b:59:
e0:83:64:5d:0c:ab:93:e2:1c:78:f0:f4:80:9e:42:
7d:49:57:71:a2:96:c6:b8:44:16:93:6c:62:87:0f:
5c:fe:df:29:89:03:6e:e5:6d:db:0a:65:b2:5e:1d:
c8:07:3d:8a:f0:6c:7f:f3:b9:32:b4:97:f6:71:81:
6b:97:e3:08:bd:d6:f8:19:40:f1:15:7e:f2:fd:a5:
12:24:08:39:fa:b6:cc:69:4e:53:1d:7e:9a:be:4b:
Ecco una spiegazione per ogni opzione che abbiamo usato con il comando openssl :
Comando | Azione |
---|---|
req -X509 | Utilizzare lo standard PKI di gestione CSR X.509 per la gestione delle chiavi. |
-nodi | Non proteggere il nostro certificato con una passphrase. Apache deve essere in grado di utilizzare il certificato senza l'interruzione di una passphrase. |
-giorni 2555 | Indica la validità del certificato a 7 anni o 2555 giorni. Il periodo di tempo può essere regolato secondo necessità. |
-newkey rsa: 2048 | Specificato per generare sia la chiave che il certificato utilizzando RSA a 2048 bit di lunghezza. |
Successivamente, vogliamo creare un gruppo Diffie-Heliman per la negoziazione di PFS con i clienti.
[centos#] openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Questo richiederà da 5 a 15 minuti.
Perfect Forward Secrecy- Utilizzato per proteggere i dati della sessione nel caso in cui la chiave privata sia stata compromessa. Questo genererà una chiave utilizzata tra il client e il server che è unica per ogni sessione.
Ora aggiungi la configurazione Perfect Forward Secrecy al nostro certificato.
[[email protected]]# cat /etc/ssl/certs/dhparam.pem | tee -a /etc/ssl/certs/self-sign-apache.crt
Configurare Apache per utilizzare file di chiavi e certificati
Apporteremo modifiche a /etc/httpd/conf.d/ssl.conf -
Apporteremo le seguenti modifiche a ssl.conf . Tuttavia, prima di farlo dovremmo eseguire il backup del file originale. Quando si apportano modifiche a un server di produzione in un editor di testo avanzato come vi o emcas , è consigliabile eseguire sempre il backup dei file di configurazione prima di apportare modifiche.
[[email protected]]# cp /etc/httpd/conf.d/ssl.conf ~/
Ora continuiamo le nostre modifiche dopo aver copiato una copia funzionante di ssl.conf nella root della nostra cartella home.
- Locate
- Modificare sia DocumentRoot che ServerName come segue.
\\# General setup for the virtual host, inherited from global configuration
DocumentRoot "/var/www/html"
ServerName centos.vmnet.local:443
DocumentRootquesto è il percorso della directory predefinita di apache. In questa cartella dovrebbe esserci una pagina predefinita che visualizzerà una richiesta HTTP che richiede la pagina predefinita del tuo server web o sito.
ServerNameè il nome del server che può essere un indirizzo IP o il nome host del server. Per TLS, è consigliabile creare un certificato con un nome host. Dal nostro tutorial OpenLdap, abbiamo creato un hostname di centos sul dominio aziendale locale: vmnet.local
Ora vogliamo commentare le seguenti righe.
SSLProtocol
# SSL Protocol support:
# List the enable protocol levels with which clients will be able to
# connect. Disable SSLv2 access by default:
~~~~> #SSLProtocol all -SSLv2
# SSL Cipher Suite:
# List the ciphers that the client is permitted to negotiate.
# See the mod_ssl documentation for a complete list.
~~~~> #SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
Quindi fai sapere ad Apache dove trovare il nostro certificato e la coppia di chiavi privata / pubblica.
Specificare il percorso del nostro file di certificato autofirmato
# Server Certificate:
# Point SSLCertificateFile at a PEM encoded certificate. If
# the certificate is encrypted, then you will be prompted for a
# pass phrase. Note that a kill -HUP will prompt again. A new
# certificate can be generated using the genkey(1) command.
~~~~> SSLCertificateFile /etc/ssl/certs/self-sign-apache.crt
specify path to our private key file
# Server Private Key:
# If the key is not combined with the certificate, use this
# directive to point at the key file. Keep in mind that if
# you've both a RSA and a DSA private key you can configure
# both in parallel (to also allow the use of DSA ciphers, etc.)
~~~~> SSLCertificateKeyFile /etc/ssl/private/self-gen-apache.key
Infine, dobbiamo consentire le connessioni in entrata a https sulla porta 443.