Das umfassende Apache SSL-Lernprogramm für CentOS 7 für Dummies - Wie Man

Das umfassende Apache SSL-Lernprogramm für CentOS 7 für Dummies

Sie verfügen über eine funktionierende Apache-Installation mit SSL, einschließlich Zertifikaten von LetsEncrypt, die bis zum Ende dieses Lernprogramms automatisch erneuert werden.

15 Schritte insgesamt

Schritt 1: Installieren Sie Apache, mod_ssl, php, java und epel

[root @ server ~] # yum -y installiere httpd mod_ssl php java epel-release

[root @ server ~] # aktualisiertb

Schritt 2: Installieren Sie Certbot

[root @ server ~] # Installieren Sie certbot

Schritt 3: Konfigurieren Sie Apache so, dass es beim Booten gestartet wird

[root @ server ~] # systemctl httpd aktivieren

Schritt 4: Kopie von Clean Apache Config aufbewahren

[root @ server ~] # cd / etc / httpd / conf /
[root @ server ~] # cp httpd.conf httpd.conf.orig

Schritt 5: Löschen Sie die Konfigurationsdatei und ersetzen Sie sie mit der Cleaner-Konfigurationsdatei von EC

Öffne die httpd.conf in deinem Editor, lösche sie und ersetze sie durch:

Cleaner-Konfigurationsdatei von EC:

ServerRoot "/ etc / httpd"
Hören Sie 80

Include conf.modules.d / *. Conf
Include hosts.d / *. Conf

Benutzer-Apache
Gruppen-Apache

ServerAdmin [email protected]

AllowOverride keine
Erfordert alle verweigert

DocumentRoot "/ var / www / html"

AllowOverride Keine
# Erlauben Sie offenen Zugang:
Erfordert alle Gewähr

Optionsindizes FollowSymLinks
AllowOverride Keine
Erfordert alle Gewähr

DirectoryIndex index.html

Erfordert alle verweigert

ErrorLog "logs / error_log"

LogLevel warnen

LogFormat "% h% l% u% t "% r "%> s% b "% {Referer} i ""% {User-Agent} i "" kombiniert
LogFormat "% h% l% u% t \% r "%> s% b "ist üblich


LogFormat "% h% l% u% t"% r "%> s% b "% {Referer} i ""% {User-Agent} i "% I% O" kombiniert

CustomLog "logs / access_log" kombiniert

ScriptAlias ​​/ cgi-bin / "/ var / www / cgi-bin /"

AllowOverride Keine
Optionen Keine
Erfordert alle Gewähr

TypesConfig /etc/mime.types

AddType-Anwendung / x-compress .Z
AddType-Anwendung / x-gzip .gz .tgz

AddType text / html .shtml
AddOutputFilter UMFASST .shtml

AddDefaultCharset UTF-8

MIMEMagicFile conf / magic

EnableSendfile on

IncludeOptional conf.d / *. Conf

NameVirtualHost *: 80

Schritt 6: Bewahren Sie eine saubere Kopie der mod_ssl-Konfigurationsdatei auf

[root @ server ~] # cd /etc/httpd/conf.d/
[root @ server ~] # cp ssl.conf ssl.conf.orig

Schritt 7: Löschen Sie die SSL-Konfigurationsdatei und ersetzen Sie sie mit der Cleaner-SSL-Konfigurationsdatei von EC

Öffne die httpd.conf in deinem Editor, lösche sie und ersetze sie durch:

EC_s Cleaner mod_ssl-Konfigurationsdatei:

Hören Sie 443 https

SSLPassPhraseDialog exec: / usr / libexec / httpd-ssl-pass-dialog

SSLSessionCache shmcb: / run / httpd / sslcache (512000)
SSLSessionCacheTimeout 300

SSLRandomSeed-Startdatei: / dev / urandom 256
SSLRandomSeed-Verbindung integriert

SSLCryptoDevice eingebaut

Include hosts.d / *. Ssl

ErrorLog logs / ssl_error_log
TransferLog-Protokolle / ssl_access_log
LogLevel warnen

SSLEngine an
SSLProtocol all -SSLv2
SSLCipherSuite HIGH: MEDIUM:! ANULL:! MD5:! SEED:! IDEE
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key

SSLOptions + StdEnvVars

SSLOptions + StdEnvVars

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

CustomLog-Protokolle / ssl_request_log
"% t% h% {SSL_PROTOCOL} x% {SSL_CIPHER} x "% r "% b"

NameVirtualHost *: 443

Schritt 8: Erstellen Sie einen VirtualHost-Eintrag für die HTTP-Umleitung

mkdir /etc/httpd/hosts.d
cd /etc/httpd/hosts.d

Erstellen Sie in Ihrem Editor die Datei /etc/httpd/hosts.d/exampledomain.conf, die Folgendes enthält:

### REDIRECT @ TO SSL ###
ServerAdmin [email protected]
ServerName exampledomain.com
Permanent umleiten / https://exampledomain.com/
ErrorLog logs / exampledomain_error.log
# Mögliche Werte sind: debug, info, notice, warn, error, krit,
# alarm, emerg.
LogLevel warnen
CustomLog logs / exampledomain_access.log kombiniert

### REDIRECT WWW TO SSL ###
ServerAdmin [email protected]
ServerName www.exampledomain.com
Permanent umleiten / https://exampledomain.com/
ErrorLog logs / exampledomain_error.log
# Mögliche Werte sind: debug, info, notice, warn, error, krit,
# alarm, emerg.
LogLevel warnen
CustomLog logs / exampledomain_access.log kombiniert

Schritt 9: Erstellen Sie einen VirtualHost-Eintrag für SSL und WWW-Umleitung

Erstellen Sie in Ihrem Editor Ihrer Wahl /etc/httpd/hosts.d/exampledomain.ssl mit:

### DER EIN WAHRE VIRTUALHOST EINTRITT! ALL HAIL THE CHOSEN ONE! ###
ServerAdmin [email protected]
ServerName exampledomain.com
SSLEngine an
SSLProtocol all -SSLv2
SSLCipherSuite HIGH: MEDIUM:! ANULL:! MD5:! SEED:! IDEE
SSLCertificateFile /etc/letsencrypt/live/exampledomain/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/exampledomain.com/privkey.pem
DocumentRoot / var / www / exampledomain

Optionen FollowSymLinks
AllowOverride Keine


Optionsindizes FollowSymLinks-MultiViews
AllowOverride All
Ordnung erlauben, verweigern
von allen zulassen

ScriptAlias ​​/ cgi-bin / / usr / lib / cgi-bin /

AllowOverride Keine
Optionen + ExecCGI -MultiViews + SymLinksIfOwnerMatch
Ordnung erlauben, verweigern
Erlaube von allen

ErrorLog logs / exampledomain_error.log
# Mögliche Werte sind: debug, info, notice, warn, error, krit,
# alarm, emerg.
LogLevel warnen
CustomLog logs / exampledomain_access.log kombiniert

### REDIRECT SSL WWW ZU SSL @ ###
ServerAdmin [email protected]
ServerName www.exampledomain.com
SSLEngine an
SSLProtocol all -SSLv2
SSLCipherSuite HIGH: MEDIUM:! ANULL:! MD5:! SEED:! IDEE
SSLCertificateFile /etc/letsencrypt/live/exampledomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/exampledomain.com/privkey.pem
Permanent umleiten / https://exampledomain.com/
ErrorLog logs / exampledomain_error.log
# Mögliche Werte sind: debug, info, notice, warn, error, krit,
# alarm, emerg.
LogLevel warnen
CustomLog logs / exampledomain_access.log kombiniert

Schritt 10: Anfordern / Erstellen von SSL-Zertifikaten mithilfe von Certbot

[root @ server ~] # sudo certbot --apache certonly

Befolgen Sie die Anweisungen. Sie werden nach einer E-Mail-Adresse gefragt und für welche Domäne Sie ein Zertifikat erstellen möchten.
Habe es sicher sowohl auf www.expland.com als auch auf www.exampledomain.com.

Sobald dies abgeschlossen ist, erhalten Sie ein lokales Verzeichnis, in dem Ihre Zertifikate gespeichert wurden. Stellen Sie sicher, dass der Zertifikatpfad mit denen übereinstimmt, die Sie in "exampledomain.ssl" eingegeben haben.

Schritt 11: Automatische Erneuerung des Zertifikats einrichten

[root @ server ~] # crontab -e
#dies öffnet Ihre Crontab-Datei in vi und fügt die folgende Zeile hinzu

14 0,12 * * * Zertifikat erneuern

Schritt 12: Site-Dateien nach Webroot kopieren

[root @ server ~] # mkdir / var / www / exampledomain
[root @ server ~] # cp / Pfad / zu / website / * / var / www / exampledomain /

Schritt 13: Öffnen Sie 80 und 443 in der Firewall

[root @ server ~] # firewall-cmd --zone = public --add-port = 80 / tcp --permanent
[root @ server ~] # firewall-cmd --zone = public --add-port = 443 / tcp --permanent

Schritt 14: Erstellen Sie DNS-Einträge

Erstellen Sie A-Einträge auf Ihrem DNS-Server für exampledomain.com und www.exampledomain.com und richten Sie sie auf diesen Apache-Server.

Schritt 15: Starten Sie Apache

[root @ server ~] # Dienst httpd start

Sie sollten jetzt eine Arbeitsstelle haben. Wenn Sie zu http://exampledomain.com, http://www.exampledomain.com oder https://www.exampledomain.com navigieren, sollten Sie alle zu https://exampledomain.com umleiten, wo Sie Ihre Site glücklich sehen sollten und sicher.

Denken Sie daran, dass die Verbreitung von DNS-Einträgen 24 Stunden dauern kann, wenn dies eine öffentlich verfügbare Website ist.

Zusätzliche Sicherheitshinweise:

Wenn Sie nach einem stärker gesperrten Server suchen, der einige der in älteren TLS- und SSL-Versionen erkannten Schwachstellen vermeidet, können Sie die .ssl-Dateien in /hosts.d ändern, um alle außer dem neuesten TLS zu deaktivieren.

Dies kann zu Kompatibilitätsproblemen mit allen aktuellen Browsern führen. Wenn Sie dies jedoch möchten, ersetzen Sie einfach die folgenden Zeilen:

SSLProtocol all -SSLv2
SSLCipherSuite HIGH: MEDIUM:! ANULL:! MD5:! SEED:! IDEE

Mit diesen Zeilen stattdessen:

SSLRandomSeed Startup eingebaut
SSLRandomSeed-Verbindung integriert
SSLProtocol -all + TLSv1.2
SSLCipherSuite EECDH + AESGCM: EDH + AESGCM: AES256 + EECDH: AES256 + EDH
SSLHonorCipherOrder auf
SSLSessionCache "shmcb: C: /Apache2.2/logs/ssl_scache (512000)"
SSLSessionCacheTimeout 300

Ein großartiges Tool, um Ihre SSL-Konfiguration zu testen und festzustellen, welche Schwachstellen Sie möglicherweise haben: https://www.ssllabs.com/ssltest