Cum să securizați Apache cu SSL și să criptăm în FreeBSD


În acest tutorial vom afla cum să securizăm serverul Apache HTTP cu certificate TLS/SSL oferite de Let's Encrypt în FreeBSD 11. x. Vom aborda, de asemenea, modul de automatizare a procesului de reînnoire a certificatului pentru Lets’ Encrypt.

Certificatele TLS/SSL sunt folosite de serverul web Apache pentru a cripta comunicarea dintre nodurile finale sau, mai obișnuit, între server și client, pentru a oferi securitate. Let’s Encrypt oferă utilitarul de linie de comandă certbot, care este o aplicație care vă poate facilita modul în care puteți obține certificate de încredere gratuit.

Cerințe:

  1. Instalarea FreeBSD 11.x
  2. 10 lucruri de făcut după instalarea FreeBSD
  3. Cum se instalează Apache, MariaDB și PHP în FreeBSD

Pasul 1: Configurați Apache SSL pe FreeBSD

1. Înainte de a începe să instalați utilitarul certbot și să creați fișierul de configurare TSL pentru Apache, creați mai întâi două directoare distincte denumite sites-available și Activat pentru site-uri în directorul de configurare rădăcină Apache lansând comenzile de mai jos.

Scopul acestor două directoare este de a facilita gestionarea configurației găzduirii virtuale în sistem, fără a modifica fișierul principal de configurare Apache httpd.conf de fiecare dată când adăugăm o nouă gazdă virtuală.

# mkdir /usr/local/etc/apache24/sites-available
# mkdir /usr/local/etc/apache24/sites-enabled

2. După ce ați creat ambele directoare, deschideți fișierul Apache httpd.conf cu un editor de text și adăugați următoarea linie aproape de sfârșitul fișierului, așa cum este ilustrat mai jos.

# nano /usr/local/etc/apache24/httpd.conf

Adăugați următorul rând:

IncludeOptional etc/apache24/sites-enabled/*.conf

3. Apoi, activați modulul TLS pentru Apache creând următorul fișier nou numit 020_mod_ssl.conf în modules.d< director cu următorul conținut.

# nano /usr/local/etc/apache24/modules.d/020_mod_ssl.conf

Adăugați următoarele linii în fișierul 020_mod_ssl.conf.

Listen 443
SSLProtocol ALL -SSLv2 -SSLv3
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
SSLPassPhraseDialog  builtin
SSLSessionCacheTimeout  300

4. Acum, decomentați modulul SSL din fișierul /usr/local/etc/apache24/httpd.conf eliminând hashtagul de la început din următorul rând, după cum este ilustrat mai jos:

LoadModule ssl_module libexec/apache24/mod_ssl.so

5. Apoi, creați fișierul de configurare TLS pentru domeniul dvs. în directorul site-uri disponibile, de preferință cu numele domeniului dvs., așa cum este prezentat în fragmentul de mai jos:

# nano /usr/local/etc/apache24/sites-available/bsd.lan-ssl.conf

Adăugați următoarea configurație virtualhost în fișierul bsd.lan-ssl.conf.

<VirtualHost *:443>
    ServerName www.yourdomain.com
	ServerAlias yourdomain.com
                DocumentRoot "/usr/local/www/apache24/data/"
	SSLEngine on

	SSLCertificateFile "/usr/local/etc/letsencrypt/live/www.yourdomain.com/cert.pem"
	SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/www.yourdomain.com/privkey.pem"
	SSLCertificateChainFile "/usr/local/etc/letsencrypt/live/www.yourdomain.com/fullchain.pem"

<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
</FilesMatch>

<Directory "/usr/local/www/apache24/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>

	BrowserMatch "MSIE [2-5]" \
        nokeepalive ssl-unclean-shutdown \
        downgrade-1.0 force-response-1.0

	CustomLog "/var/log/apache/httpd-ssl_request.log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

	<Directory "/usr/local/www/apache24/data/">
            Options Indexes FollowSymLinks MultiViews
        #AllowOverride controls what directives may be placed in .htaccess files.       
                        AllowOverride All
        #Controls who can get stuff from this server file
                        Require all granted
        </Directory>
       
    ErrorLog "/var/log/apache/yourdomain.ssl-error.log"
    CustomLog "/var/log/apache/yourdomain.ssl-access_log" combined

</VirtualHost>

Asigurați-vă că înlocuiți variabila nume de domeniu din instrucțiunile ServerName, ServerAlias, ErrorLog, CustomLog.

Pasul 2: Instalați Lets’Encrypt pe FreeBSD

6. La pasul următor, lansați următoarea comandă pentru a instala utilitarul certbot furnizat de Let's Encrypt, care va fi folosit pentru a obține < Certificate gratuiteApache TSL pentru domeniul dvs.

În timpul instalării certbot pe ecran va fi afișată o serie de solicitări. Utilizați captura de ecran de mai jos pentru a configura utilitarul certbot. De asemenea, compilarea și instalarea utilitarului certbot poate dura ceva timp, în funcție de resursele mașinii dvs.

# cd /usr/ports/security/py-certbot
# make install clean

7. După ce procesul de compilare s-a încheiat, lansați comanda de mai jos pentru a actualiza utilitarul certbot și dependențele necesare pentru certbot.

# pkg install py27-certbot
# pkg install py27-acme

8. Pentru a genera un certificat pentru domeniul dvs., lansați comanda așa cum este ilustrat mai jos. Asigurați-vă că furnizați locația corectă a rădăcinii web în care fișierele site-ului dvs. sunt stocate în sistemul de fișiere (directiva DocumentRoot din fișierul de configurare a domeniului) folosind marcatorul -w. Dacă aveți mai multe subdomenii, adăugați-le pe toate cu marcajul -d.

# certbot certonly --webroot -w /usr/local/www/apache24/data/ -d yourdomain.com -d www.yourdomain.com

În timp ce obțineți certificatul, furnizați o adresă de e-mail pentru reînnoirea certificatului, apăsați a pentru a fi de acord cu termenii și condițiile Let’s Encrypt și n pentru a nu partaja adresa de e-mail partenerilor Let’s Encrypt.

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):
There seem to be problems with that address. Enter email address (used for
urgent renewal and security notices)  If you really want to skip this, you can
run the client with --register-unsafely-without-email but make sure you then
backup your account key from /etc/letsencrypt/accounts   (Enter 'c' to cancel):

-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: a ------------------------------------------------------------------------------- Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about EFF and our work to encrypt the web, protect its users and defend digital rights. ------------------------------------------------------------------------------- (Y)es/(N)o: n Obtaining a new certificate Performing the following challenges: http-01 challenge for www.domain.com Using the webroot path /usr/local/www/apache24/data for all unmatched domains. Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /usr/local/etc/letsencrypt/live/www.yourdomain.com/fullchain.pem. Your cert will expire on 2017-11-15. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /usr/local/etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le

9. După ce ați obținut certificatele pentru domeniul dvs., puteți rula comanda ls pentru a lista toate componentele certificatului (lanț, cheie privată, certificat), așa cum este prezentat în exemplul de mai jos.

# ls -al /usr/local/etc/letsencrypt/live/www.yourdomain.com/

Pasul 3: Actualizați certificatele Apache TLS pe FreeBSD

10. Pentru a adăuga certificate Let’s Encrypt pe site-ul dvs. web, deschideți fișierul de configurare apache pentru domeniul dvs. și actualizați următoarele rânduri pentru a reflecta calea certificatelor emise.

# nano /usr/local/etc/apache24/sites-available/bsd.lan-ssl.conf

Adăugați aceste linii de certificat TLS:

SSLCertificateFile "/usr/local/etc/letsencrypt/live/www.yourdomain.com/cert.pem"
	SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/www.yourdomain.com/privkey.pem"
	SSLCertificateChainFile "/usr/local/etc/letsencrypt/live/www.yourdomain.com/fullchain.pem"

11. În cele din urmă, activați fișierul de configurare TLS, creând un link simbolic pentru fișierul de configurare TLS al domeniului dvs. către directorul situri activate, verificați configurațiile Apache pentru posibile erori de sintaxă și, dacă sintaxa este OK, reporniți demonul Apache lansând comenzile de mai jos.

# ln -sf /usr/local/etc/apache24/sites-available/bsd.lan-ssl.conf /usr/local/etc/apache24/sites-enabled/
# apachectl -t
# service apache24 restart

12. Pentru a verifica dacă serviciul Apache ascultă pe portul HTTPS 443, lansați următoarea comandă pentru a lista socket-urile de rețea httpd.

# sockstat -4 | grep httpd

13. Puteți naviga la adresa de domeniu dintr-un browser prin protocolul HTTPS pentru a confirma că certificatele Let’s Encrypt au fost aplicate cu succes.

https://www.yourdomain.com

14. Pentru a obține informații suplimentare despre certificatul Let’s Encrypt emis din linia de comandă, utilizați comanda openssl după cum urmează.

# openssl s_client -connect www.yourdomain.com:443

15. De asemenea, puteți verifica dacă traficul este criptat cu un certificat valid furnizat de Let’s Encrypt CA de pe un dispozitiv mobil, așa cum este ilustrat în captura de ecran mobilă de mai jos.

Asta e tot! Clienții vă pot vizita acum site-ul în siguranță, deoarece traficul care circulă între server și browserul clientului este criptat. Pentru sarcini mai complexe referitoare la utilitarul certbot, accesați următorul link: https://certbot.eff.org/