RTFM.WIKI

Ordnung muß sein. Ordnung über alles (18+)

Инструменты пользователя

Инструменты сайта


linux:cloudflare_ssl_full_strict

Cloudflare: SSL сертификаты Full Strict

Получаем бесплатные wildcard сертификаты от Cloudflare.

Cloudflare

Переходим в dash.cloudflare.com и выбираем свой домен.

1️⃣ SSL/TLS → Origin Server → Create Certificate

2️⃣ Выбираем тип RSA

3️⃣ Нужно скопировать crt и key. Повторно посмотреть private key будет нельзя - только генерировать сертфикат заново.

4️⃣ SSL/TLS → Origin Server → Authenticated Origin Pulls

5️⃣ SSL/TLS → Overview → Full (strict)

Теперь всё это добро нужно куда-нибудь сохранить. Кому как удобней:

  • /etc/cloudflare/*
  • /etc/ssl/certs
  • /etc/nginx/ssl

Должно быть 3 файла

/etc/cloudflare/cert/cloudflare_origin_rsa.pem
/etc/cloudflare/cert/foobar.com_cert.pem
/etc/cloudflare/cert/foobar.com_privatekey.pem

Где взять origin_rsa см. ниже

Origin pull CA

Скачать PEM файл authenticated_origin_pull_ca.pem

Apache

SSLVerifyClient require
SSLVerifyDepth 1
SSLCACertificateFile /path/to/cloudflare_origin_rsa.pem

nginx

ssl_client_certificate /path/to/cloudflare_origin_rsa.pem;
ssl_verify_client on;

Cloudflare Root сертификат

Этот шаг необязательный. При желании можно собрать полную цепочку сертификатов.

Чтобы добавить корневые сертификаты Cloudflare в сертификат Origin, необходимо загрузить и объединить их (ca+origin). См.Add Cloudflare Origin CA root certificates

Для RSA private keys

wget -O cloudflare_root.pem https://developers.cloudflare.com/ssl/static/origin_ca_rsa_root.pem

Для ECDSA private keys

wget -O cloudflare_root.pem https://developers.cloudflare.com/ssl/static/origin_ca_ecc_root.pem

Объединить

cat foobar.com_cert.pem cloudflare_root.pem > foobar.com_cert_full.pem

Nginx

Конфигурационный файл

server {
    listen 80;
#    listen [::]:80;
    server_name punx.cc www.punx.cc;
    return 301 https://$server_name$request_uri;
}
 
server {
    listen 443 http2 ssl;
#    listen [::]:443 http2 ssl;
 
    server_name punx.cc www.punx.cc;
 
    root /var/www/punx.cc/public_html;
    index index.html index.php;
 
    location / {
            try_files $uri $uri/ =404;
    }
 
    ssl_certificate        /etc/cloudflare/punx.cc_cert.pem;
    ssl_certificate_key    /etc/cloudflare/punx.cc_privatekey.pem;
    ssl_client_certificate /etc/cloudflare/authenticated_origin_pull_ca.pem;
    ssl_verify_client on;
 
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
 
    ssl_stapling on;
    ssl_stapling_verify on;
 
    resolver 1.1.1.1 1.0.0.1 valid=300s;
    resolver_timeout 10s;
}

Apache

<VirtualHost *:80>
    Redirect permanent / https://punx.cc/
    ServerName  punx.cc
    ServerAlias www.punx.cc
</VirtualHost>
 
<VirtualHost *:443>
    ServerName  punx.cc
    ServerAlias www.punx.cc
    DocumentRoot /var/www/punx.cc/public_html
    #ErrorLog ${APACHE_LOG_DIR}/error.log
    #CustomLog ${APACHE_LOG_DIR}/access.log combined
 
    SSLEngine on
    SSLCertificateFile      /etc/cloudflare/punx.cc_cert.pem
    SSLCertificateKeyFile   /etc/cloudflare/punx.cc_privatekey.pem
    SSLCertificateChainFile /etc/cloudflare/origin_ca_rsa_root.pem
 
    SSLProtocol             all -SSLv2 -SSLv3
    SSLHonorCipherOrder     on
    SSLCipherSuite          ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
 
    <IfModule headers_module>
        Header always edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
        #Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains"
    </IfModule>
</VirtualHost>

Проверка

Проверяем домен на сайте ssllabs. Для А+ видимо нужно или оставить только tls13 или поиграться со шрифтами шифрами.

Real IP

Для отображения реального IP посетителя сайта

nginx

set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 104.16.0.0/13;
set_real_ip_from 104.24.0.0/14;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 131.0.72.0/22;
 
#real_ip_header CF-Connecting-IP;
real_ip_header X-Forwarded-For;

apache

Debian/Ubuntu

a2enmod remoteip
 
/etc/apache2/sites-available/000-default.conf
 
RemoteIPHeader CF-Connecting-IP
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
 
Заменить LogFormat в ''apache.conf''. Меняем ''%h'' на ''%a'' в файле ''/etc/apache2/apache2.conf''.
 
Меняем
 
<code bash>LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined

на

LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined

Добавляем в файл /etc/apache2/conf-available/remoteip.conf

RemoteIPHeader CF-Connecting-IP
RemoteIPTrustedProxy 173.245.48.0/20
RemoteIPTrustedProxy 103.21.244.0/22
RemoteIPTrustedProxy 103.22.200.0/22
RemoteIPTrustedProxy 103.31.4.0/22
RemoteIPTrustedProxy 141.101.64.0/18
RemoteIPTrustedProxy 108.162.192.0/18
RemoteIPTrustedProxy 190.93.240.0/20
RemoteIPTrustedProxy 188.114.96.0/20
RemoteIPTrustedProxy 197.234.240.0/22
RemoteIPTrustedProxy 198.41.128.0/17
RemoteIPTrustedProxy 162.158.0.0/15
RemoteIPTrustedProxy 104.16.0.0/13
RemoteIPTrustedProxy 104.24.0.0/14
RemoteIPTrustedProxy 172.64.0.0/13
RemoteIPTrustedProxy 131.0.72.0/22
a2enconf remoteip

CentOS

В CentOS модуль remoip уже загружен. Добавляем в файл /etc/httpd/conf.d/remoteip.conf

RemoteIPHeader X-Forwarded-For
RemoteIPTrustedProxy 173.245.48.0/20
# и далее все адреса CF

В файле /etc/httpd/conf/httpd.conf заменить

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

на

LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined

Ссылки

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
 
linux/cloudflare_ssl_full_strict.txt · Последнее изменение: 2023/07/22 16:01 — dx