Instalacja podstawowa sudo apt install apache2 certbot python3-certbot-apache php8.4-fpm libapache2-mod-fcgid Konfiguracja interaktywna Certbot sudo certbot --no-redirect Konfiguracja Apache2 W pliku /etc/letsencrypt/options-ssl-apache.conf zmienić: SSLProtocol -all +TLSv1.3 +TLSv1.2 Dla klucza ECDSA: SSLCipherSuite TLS_AES_256_GCM_SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256 Dla klucza RSA: W /etc/apache2/apache2.conf zmienić: Timeout 30 KeepAliveTimeout 5 MaxKeepAliveRequests 100 i dodać na końcu, przed include: SSLSessionCache "shmcb:/tmp/ssl_scache(1048576)" SSLStaplingCache "shmcb:/tmp/stapling-cache(150000)" SSLUseStapling off Zabezpieczenie przed nieprawidłowymi żądaniami, wewnątrz : deny from all Stampling w Let's Encrypt nie jest obsługiwany i został wycofany. W pliku security (/etc/apache2/conf-enabled/security.conf): ServerSignature Off ServerTokens Prod W plikach stron (/etc/apache2/sites-enabled/*) (tylko z SSL!) lub dla wszystkich stron w /etc/letsencrypt/options-ssl-apache.conf: Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains" W plikach stron (/etc/apache2/sites-enabled/*): ServerName ServerAlias ServerAlias ServerAdmin ServerName może być tylko jeden! ServerAlias może występować wielokrotnie. Poza ServerName i ServerAlias dodać: Redirect 404 / Przekierowanie www na bezwww, dodać przed warunkiem 404: RewriteEngine On RewriteCond %{HTTP_HOST} ^www\. [NC] RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301] Właczenie kompresji in/out, oraz warunkowe wyłączenie z kompresji już skompresowanych: SetOutputFilter DEFLATE SetInputFilter DEFLATE SetEnvIfNoCase Request_URI "\.(?:zip|rar|7z|7zip|gzip|xz|tar|gz|bz2)$" no-gzip DeflateCompressionLevel 4 DeflateCompressionLevel domyślnie wynosi 6 Nagłówki CSRP: Header always set Content-Security-Policy "default-src 'self' 'unsafe-inline'; \ script-src 'self' 'unsafe-inline' https://www.googletagmanager.com https://analytics.ahrefs.com; \ script-src-elem 'self' 'unsafe-inline' https://www.googletagmanager.com https://analytics.ahrefs.com; \ connect-src 'self' 'unsafe-inline' https://*.google-analytics.com https://analytics.ahrefs.com" Header always set X-Frame-Options "SAMEORIGIN" Header always set X-Content-Type-Options "nosniff" Header always set Referrer-Policy "origin-when-cross-origin" Zawartość całkowita pliku ogólnego dla stron bez SSL (000-default.conf): Redirect permanent https://%{HTTP_HOST}%{REQUEST_URI} Dodać rekord DNS CAA 0 issue letsencrypt.org