2012-05-25 13 views
18

Czytałem How to configure playframework server to support ssl i próbowałem również śledzić http://www.playframework.org/documentation/1.1.1/releasenotes-1.1#https ale to nie działa dla mnieJak skonfigurować PlayFramework2 do obsługi SSL?

wiele dzięki ~

czytam doc dla Play1 bo nie mogę znaleźć żadnego bardziej aktualne informacje o Play2 o https.

w application.conf, dodałem te linie:

https.port=9443 
certificate.key.file=conf/host.key 
certificate.file=conf/host.cert 

wpisuję run w konsoli odtwarzania, a próby uzyskania dostępu do serwera w https://localhost:9443 przeglądarka limit czasu bez niczego zalogowany wyjścia konsoli

+0

Co nie działa? Podaj więcej informacji, na przykład stosy stacków i pliki konfiguracyjne. Czytasz również dokumentację gry 1 i próbujesz skonfigurować SSL dla Play 2, więc czytasz niewłaściwą dokumentację –

+0

@ Li-o Zaktualizowałem o więcej informacji. Czy masz zaktualizowaną dokumentację Play2 dotyczącą konfiguracji https? Czy możesz mi to udostępnić ~? Wielkie dzięki ~ – Chris

Odpowiedz

24

Nie będzie działać z podejściem, które podejmujesz. Pomylisz się z informacjami o wersji 1.x gałęzi 2.x.

w 1.x gałęzi, jest to możliwe. Informacje o wydaniu są wystarczające i pracowały dla mnie.

Dla 2.1+ oddziału, proszę odnieść się do komentarza @ Christina. Obsługa została dodana w wersji 2.1, a wątek dyskusji zawiera szczegóły.

Cytując odpowiedź James Roper za

W trybie dev, to jest bardzo proste, wystarczy:

JAVA_OPTS = -Dhttps.port = 9443 run gra

Play wygenerować klucz prywatny i ja podpisany certyfikat, który oczywiście twoja przeglądarka będzie się opierać z dużym czerwonym ostrzeżeniem. Będzie on ponownie używał wygenerowanego samopodpisanego certyfikatu dla każdego kolejnego uruchomienia gry, więc błąd przeglądarki powinien zostać wyświetlony tylko jeden raz. Oczywiście ten sam podpisany certyfikat prawdopodobnie nie jest tym, czego oczekujesz od produkcji . Należy również zauważyć, że samodzielne podpisanie certyfikatu będzie działać tylko na maszynach JVM, które korzystają z bibliotek bezpieczeństwa Sun (np. Oracle i OpenJDK, ale przede wszystkim nie IBM J9). W maszynach JVM, które ich nie używają, podczas próby wygenerowania certyfikatu pojawi się NoClassDefFoundError.

W prod (i ta konfiguracja ma również zastosowanie do dev), konfigurujesz ją tak bardzo, jak zwykle konfigurujesz SSL w Javie, przez właściwości systemowe . Oto podsumowanie:

https.port - port, który powinien być stosowany

https.kluczy - Ścieżka do magazynu kluczy zawierający klucz prywatny i certyfikat, jeśli nie warunkiem generuje kluczy Ci

https.keyStoreType - Klucz typu sklep, domyślnie „JKS”

https.keyStorePassword - hasło, domyślnie ""

https.keyStoreAlgorithm - algorytm sklep klucz, domyślnie algorytmu platformy domyślnej

https.trustStore - To funkcja nie został w pełni zrealizowany, obecnie będzie to zawsze używać magazynu zaufanych JDK do weryfikacji certyfikatów po stronie klienta (które może oczywiście skonfigurowania się) bez względu na to, czy podajesz wartość dla tego , czy nie, chyba że podasz "noCA", w takim przypadku użyjesz sklepu zaufania, który ufałby wszystkim certyfikatom bez weryfikacji ani weryfikacji, , co jest przydatne, jeśli używasz klienta WWW weryfikacja certyfikatu strony.

przez 2,0 oddział, trzeba umieścić inny serwer frontem zabaw I.E albo Apache/nginx/pozostałe który nasłuchuje na https i przekazuje żądanie do odegrania w http.

Instrukcje skonfigurować serwer nakładka dostępne są w http://www.playframework.org/documentation/2.0.1/HTTPServer

więc uruchomić serwer gry na porcie. Żądaj apache forward z domeny domain.com do 127.0.0.1:9443.

apache Przykładowy config

<VirtualHost *:443> 

    ServerAdmin [email protected] 
    ServerName example.com 
    ServerAlias *.example.com 

    ErrorLog ${APACHE_LOG_DIR}/error.log 

    # Possible values include: debug, info, notice, warn, error, crit, 
    # alert, emerg. 
    LogLevel warn 
    CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined 
    ProxyPreserveHost On 
# ProxyPass /excluded ! 
    ProxyPass/http://127.0.0.1:9000/ 
    ProxyPassReverse/http://127.0.0.1:9000/ 


    # SSL Engine Switch: 
    # Enable/Disable SSL for this virtual host. 
    SSLEngine on 

    # A self-signed (snakeoil) certificate can be created by installing 
    # the ssl-cert package. See 
    # /usr/share/doc/apache2.2-common/README.Debian.gz for more info. 
    # If both key and certificate are stored in the same file, only the 
    # SSLCertificateFile directive is needed. 
    SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem 
    SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key 


    # Certificate Authority (CA): 
    # Set the CA certificate verification path where to find CA 
    # certificates for client authentication or alternatively one 
    <FilesMatch "\.(cgi|shtml|phtml|php)$"> 
    SSLOptions +StdEnvVars 
    </FilesMatch> 
    <Directory /usr/lib/cgi-bin> 
    SSLOptions +StdEnvVars 
    </Directory> 

    BrowserMatch "MSIE [2-6]" \ 
    nokeepalive ssl-unclean-shutdown \ 
    downgrade-1.0 force-response-1.0 
    # MSIE 7 and newer should be able to use keepalive 
    BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown 
</VirtualHost> 

Nadzieję, że to pomaga.

+7

Mimo, że było to prawdą w czasie, gdy został napisany, pozwól mi dodać tutaj, że obsługa SSL została dodana do Play 2.1, jak wskazano [to Temat Grup dyskusyjnych Google] (https://groups.google.com/d/topic/play-framework/FeTUDQwaepg/discussion). – Christina

+0

Dzięki za aktualizację. Zmodyfikuję odpowiedź – Nasir

+0

Czy podczas tworzenia certyfikatu SSL, tj. Nieużywania samopodpisanego certyfikatu, klucz publiczny utworzonego certyfikatu musi zostać zaimportowany do przeglądarek klientów Play? –

4

Teraz wydaje się, że potrzebujesz odwrotnego proxy zarządzającego SSL dla ciebie. Znalazłem dyskutowanie o tym ticket i thread.

+0

Dzięki za pomoc ~ informacyjny przeczytaj, będę nadal oglądać problem ~ – Chris

0

Jedno zrobiliśmy było wykorzystanie AWS ELB obsłużyć naszą SSL, instalacja przekazywanie SSL (HTTP - > HTTPS) przy użyciu filtrów odtwarzania. Główną korzyścią jest usunięcie obciążenia SSL z serwera i nie trzeba uruchamiać Apache ani Nginx przed grą (jak wskazuje niektóre rozwiązanie).

Można zobaczyć moją odpowiedź tutaj: https://stackoverflow.com/a/23646948/690164

ja też napisać nieco więcej na ten temat na moim blogu: http://www.mentful.com/2014/05/25/play-framework-filter-for-aws-elastic-load-balancer-forward-http-to-https/

0

Używam securesocial 3.0.3M. Ustaw

securesocial.ssl = true 

w securesocial.conf i powinieneś być dobry. Następnie ponownie uruchom SBT lub aktywatora z

JAVA_OPTS=-Dhttps.port=9443 activator run 

idź do localhost: 9443

cieszyć

3

Jest to przydatne do testowania lokalnie https:

activator "run -Dhttps.port=9005" 

Następnie należy wpisać w przeglądarce https://localhost:9005 .

Powiązane problemy