Cloudflare Error 525: SSL handshake failed у вебзастосунку Ruby on Rails

Помилка 525 означає, що Cloudflare не зміг встановити безпечне SSL-з’єднання з твоїм сервером. Проблема на боці твого сервера, а не на боці Cloudflare.

Причини.

  • SSL-сертифікат на сервері протермінований, відсутній або некоректний.
  • Сервер слухає тільки HTTP (без HTTPS).
  • Неправильна конфігурація SSL на сервері.
  • Надто строгі налаштування SSL/TLS (наприклад, відсутність потрібних протоколів).

Як виправити?

1. Перевірити сертифікат на сервері

На сервері, де працює твій Rails-застосунок, виконай:

openssl s_client -connect yourdomain.com:443

Якщо бачиш помилки типу certificate expired або unable to verify, тоді проблема саме в сертифікаті.

Рішення:

  • Онови сертифікат через Let’s Encrypt (наприклад, за допомогою Certbot).
  • Або перевір вручну шлях до сертифікатів у Nginx/Apache.

2. Перевірити налаштування Nginx/Apache

Якщо у тебе перед Rails стоїть Nginx (що майже завжди так):

Приклад конfigа /etc/nginx/sites-enabled/yourapp:

server {
    listen 443 ssl;
    server_name yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

    # Інші налаштування проксі для Rails Puma
    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

Перевір правильність шляхів до сертифікатів і права доступу до них.

3. Перевірити налаштування Cloudflare

У Cloudflare в налаштуваннях SSL/TLS переконайся, що:

  • Встановлений режим “Full” або “Full (strict)”.
  • Flexible режим не підходить для Rails-застосунків (він викликає 525).

“Full (strict)” — найбезпечніший варіант, якщо сертифікат дійсний.

4. Перевірити налаштування Puma/Rails

Якщо Rails сам слухає HTTPS (рідко, але буває), тоді у файлі puma.rb потрібно додати:

ssl_bind '0.0.0.0', '3000', {
  key: '/path/to/private-key.pem',
  cert: '/path/to/certificate.pem'
}

Але зазвичай у продакшені Rails працює лише через HTTP на localhost, а SSL обробляє Nginx.

Короткий че-кліст

Є дійсний SSL-сертифікат на сервері.
Nginx/Apache правильно налаштований для роботи з SSL.
У Cloudflare встановлений режим SSL “Full” або “Full (strict)”.
Сервер дійсно приймає HTTPS-з’єднання на порту 443.