SSL с Puma, ошибка синтаксического анализа HTTP, некорректный запрос - PullRequest
0 голосов
/ 22 февраля 2019

Попытка настроить Puma с HTTPS для приложения rails, обслуживаемого в частной сети на удаленном сервере. Puma Docs создают видимость, что это возможно, и они предоставляют эту команду:

puma -b 'ssl://127.0.0.1:9292?key=path_to_key&cert=path_to_cert'

Шаги (для целей тестирования):

Создание личногоключ и самозаверяющий сертификат

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/puma_test.key -out /etc/zzz_puma_test.crt


Загрузка Puma

rvmsudo rails s -p 443 -b 'ssl://127.0.0.1?key=/etc/puma_test.key&cert=/etc/zzz_puma_test.crt'


Когда я загружаю сервер, в журналах я вижу это, которое я считаю странным: Listening on tcp://0.0.0.0:443 Это похоже на то, что Puma все еще загружается в http, а не в https.Ниже приведены полные журналы терминала при загрузке Puma:

=> Booting Puma
=> Rails 4.2.8 application starting in development on http://ssl://127.0.0.1?key=/etc/puma_test.key&cert=/etc/zzz_puma_test.crt:443
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
Puma starting in single mode...
* Version 3.12.0 (ruby 2.3.3-p222), codename: Llamas in Pajamas
* Min threads: 0, max threads: 16
* Environment: development
* Listening on tcp://0.0.0.0:443

Когда я пытаюсь получить доступ к сайту, я получаю эту ошибку в терминале:

Ошибка синтаксического анализа HTTP, искаженаrequest (): #Puma :: HttpParserError: Неверный формат HTTP, сбой синтаксического анализа.

В самом браузере Firefox он предоставляет такую ​​обратную связь:

SSL получил записьэто превышало максимально допустимую длину.Код ошибки: SSL_ERROR_RX_RECORD_TOO_LONG

Странно то, что я выполняю точные шаги, указанные выше, локально на моем компьютере для приложения, которое локально обслуживается на моем компьютере, и все работает нормально.

  • Я создал новое приложение
  • Запустил вышеуказанную строку для генерации секретного ключа и самозаверяющего сертификата
  • Запустил вышеуказанную строку для загрузки сервера
  • В терминале, когда сервер загружается, он показывает, что он правильно слушает (другими словами: никогда не упоминает http): Listening on ssl://127.0.0.1:443?key...cert...
  • Подключение к https://localhost/blogs работает просто отлично.

Возможно, это связано с тем, что я использую Linux-машину, а не мой Mac?Или, может быть, мое тестовое приложение живет на удаленном сервере в моей сети?Я посмотрел на метод, который генерирует эту ошибку.Это parse_error, строка 95 событий.rb .

Ресурсы уже просмотрены:

Я попытался настроить указанную выше команду rails s с несколькими различными небольшими изменениями:

  • изменил IP с 127.0.0.1 на 0.0.0.0
  • не указывайте опцию -p 443
  • укажите фактический внутренний IP-адрес вместо 127.0.0.1 (он обслуживается навнутренняя сеть)

Я также попытался удалить историю просмотров и попытался получить доступ к сайту из нескольких браузеров.

Любая помощь приветствуется, спасибо!

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Вот решение, которое наконец-то сработало для меня:

Сначала я должен был создать файл конфигурации puma с директивой ssl_bind:

# /<path_to_app>/puma/development.rb
ssl_bind '127.0.0.1', '9292', {
   cert: ‘/etc/puma_test.key',
   key: ‘/etc/zzz_puma_test.crt'
}

Затем мне пришлось загрузить сервер с puma вместо rails s.По какой-то причине я просто не мог заставить rails s работать.В команде для загрузки puma мне нужно было указать -C и путь к файлу конфигурации puma:

rvmsudo puma -b 'ssl://0.0.0.0:443?key=/etc/puma_test.key&cert=/etc/zzz_puma_test.crt' -C /<path_to_app>/puma/development.rb
0 голосов
/ 01 марта 2019

Я собрал новую виртуальную машину с сервером Ubuntu 16.04.5 LTS (ядро HWE), установил RVM, Ruby 2.3.3 и Rails 4.2.8, следовал вашим инструкциям по воспроизведению, и ... он прекрасно работает.Я использовал 0.0.0.0 в качестве адреса прослушивания и получил доступ к адресу гостя с хост-машины.

Гость:
mwp@ubuntu:~/Code/blag$ export rvmsudo_secure_path=1
mwp@ubuntu:~/Code/blag$ rvmsudo rails s -p 443 -b 'ssl://0.0.0.0?key=/etc/puma_test.key&cert=/etc/zzz_puma_test.crt'
=> Booting Puma
=> Rails 4.2.8 application starting in development on http://ssl://0.0.0.0?key=/etc/puma_test.key&cert=/etc/zzz_puma_test.crt:443
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
Puma starting in single mode...
* Version 3.12.0 (ruby 2.3.3-p222), codename: Llamas in Pajamas
* Min threads: 0, max threads: 16
* Environment: development
* Listening on ssl://0.0.0.0:443?key=/etc/puma_test.key&cert=/etc/zzz_puma_test.crt
Use Ctrl-C to stop
Хост:
mwp@macos:~$ curl -Ik https://192.168.10.137
HTTP/1.1 200 OK
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Content-Type: text/html; charset=utf-8
ETag: W/"b56dd5f9363ed0f7bd4d11c36d9471dd"
Cache-Control: max-age=0, private, must-revalidate
X-Request-Id: 555223a6-3f70-49cf-8b30-92d3047ff8a6
X-Runtime: 0.009792
Гость:
Started HEAD "/" for 192.168.10.112 at 2019-02-28 15:39:19 -0600
Cannot render console from 192.168.10.112! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by Rails::WelcomeController#index as */*
  Rendered /home/mwp/.rvm/gems/ruby-2.3.3/gems/railties-4.2.8/lib/rails/templates/rails/welcome/index.html.erb (0.6ms)
Completed 200 OK in 5ms (Views: 4.4ms | ActiveRecord: 0.0ms)

Очевидно, здесь чего-то не хватает: какая-то конфигурация на вашем сервере, какая-то Gem в вашем Gemfile или какая-то конфигурация в вашем Rails-проекте.

...