2016-02-19 47 views
6

Perl's Mojolicious obsługuje Server Name Identification (SNI), którego niektóre serwery używają do hostowania kilku witryn z jednym certyfikatem HTTPS. Pracuję nad systemem, który nie jest skonfigurowany do korzystania z tego, i trochę googlować nie pojawia się nic, co sprawia, że ​​proces jest jasny i różne części widoczne. Pytanie StackOverflow Perl LWP GET or POST to an SNI SSL URL wspomina o kilku rzeczach.Jak skonfigurować obsługę SNI dla Mojolicious?

Co więc muszę zrobić?

+0

Myślę, że kwestia ta powinna jasno jeśli proszą o wsparcie klienta dla SNI (tj wysyłając nazwę serwera w ClientHello) lub wsparcie serwer, czyli co multi-site server Mojolicious świadczenia różnych certyfikatów w zależności od witryny klient wymagane. Podczas gdy drugi może być zaimplementowany z IO :: Socket :: SSL, nie jestem pewien, czy Mojolicious oferuje sposób na jego użycie. –

+0

Odpowiedzi dla klienta i serwera byłyby najlepsze. –

Odpowiedz

6

Po pierwsze, to nie jest Mojolicious (lub LWP lub coś podobnego), który obsługuje SNI. Jest to IO::Socket::SSL, ale niezupełnie, ponieważ jest to Net::SSLeay, ale nie tak naprawdę, ponieważ jest to Twoja wersja openssl.

  • Zainstaluj openssl 1.0 lub nowszy. Prawdopodobnie chcesz użyć opcji --prefix, aby skonfigurować instalację w nowym katalogu, aby nie przeszkadzać w tym, co już masz i na czym polegają inne rzeczy.
  • Zaktualizuj Net::SSLeay, aby skompilować go względem nowego pliku openssl. Potrzebujesz wersji 1.50 lub nowszej. Problem polega na tym, że późniejszy Net::SSLeay będzie z powodzeniem pracował ze starszym openssl. Aktualizacja modułu nie daje ci nowego openssl.
  • Aktualizacja IO::Socket::SSL do 1.56 lub nowszej. Najwcześniejsza wersja pochodzi z 2012 roku, więc i tak należy ją zaktualizować.
  • Mojolicious 2,83 (wydany w 2012 roku, tak stary) dodano obsługę SNI dla klientów, a Mojolicious 6.40 (miesiąc temu) dodał ją do wszystkich serwerów sieciowych.

Można znaleźć te informacje, sprawdzając w Zmiany pliku dla każdego modułu, ale skoro już tu jesteśmy, przejdźmy Net::SSLeay klasyfikowane ze to nie jest tak proste, jak instalacja modułu.

Niektóre rzeczy trzeba zwrócić uwagę na:

  • Musisz skompilować Perl, OpenSSL i Net::SSLeay z tych samych narzędzi, dzięki czemu są binarnie kompatybilny.

pomocą zmiennej OPENSSL_PREFIX powiedzieć cpan (a rzeczy działa), gdzie można znaleźć prawo openssl.

$ export OPENSSL_PREFIX=/usr/local/ssl 
$ cpan Net::SSLeay IO::Socket::SSL 

Jeśli masz już najnowszą Net::SSLeay ale skompilowany przeciwko starszej wersji OpenSSL, można wymusić zainstalować moduł, aby go skompilować chociaż cpan myśli jego up-to-date:

$ cpan -f Net::SSLeay IO::Socket::SSL 

IO::Socket::SSL ma metody, aby sprawdzić ten (dodane w 1,84)

$ /usr/local/ssl/bin/openssl version 
OpenSSL 1.0.1r 28 Jan 2016 
$ perl -MIO::Socket::SSL -le 'print IO::Socket::SSL->VERSION' 
2.024 
$ perl -MIO::Socket::SSL -le 'print IO::Socket::SSL->can_client_sni' 
1 
+0

IO :: Socket :: SSL sam nie może tego zrobić. Musi znać nazwę hosta, którą powinien dodać do uzgadniania SSL. Jeśli nazwa zostanie podana jako PeerAddr, zostanie użyta, ale jeśli podany zostanie tylko adres IP lub uaktualnione zostaną istniejące gniazda TCP, nazwa musi być zwykle podana jawnie za pomocą 'SSL_hostname'. I właśnie to robi Mojo :: IOLoop :: Client. –

+0

Nie mam jeszcze odpowiedzi. Jednak nie martwię się, jak to się dzieje, tylko co muszę zainstalować i skonfigurować, aby to się stało. –

-1

Nie bezpośrednią odpowiedź na pytanie, ale może lepiej więc lution.

Z mojego doświadczenia jako administrator dzielonego hostingu ~ 400 domen, jest to bardziej wygodne, aby skonfigurować protokół SSL w Apache, i Mojolicious działa pod mod_perl2.

zbytniego konfigurację (sieciowe) do aplikacji jest zawsze ból w dłuższej perspektywie. W wielu przypadkach aplikacje wielodomenowe mogą również stać się niewygodne.

wykazują konfigurację Apache umożliwia zarządzanie za pomocą standardowych skryptów, na przykład odnowienie certyfikatów SSL z letsencrypt.

Oczywiście mogą istnieć ważne powody i specjalne wymagania dla innych ustawień warte dodatkowych prac.

+0

Nie szukam innych rozwiązań ani obejścia. –

+1

Thx za zaniedbanie. –