2012-05-25 27 views
18

Tôi đã đọc How to configure playframework server to support ssl và tôi cũng đã cố gắng để làm theo http://www.playframework.org/documentation/1.1.1/releasenotes-1.1#https nhưng nó không làm việc cho tôiLàm thế nào để cấu hình PlayFramework2 để hỗ trợ SSL?

cảm ơn nhiều ~

tôi đọc doc cho Play1 vì tôi không thể tìm được cập nhật nữa thông tin cho Play2 về https.

trong application.conf, tôi đã thêm những dòng này:

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

Tôi gõ run trong vở kịch console, và cố gắng để truy cập vào máy chủ tại https://localhost:9443 trình duyệt timed out mà không cần bất cứ điều gì ghi lại trong giao diện điều khiển đầu ra

+0

Điều gì không hiệu quả? Vui lòng cung cấp thêm thông tin như stacktraces và tệp cấu hình của bạn. Ngoài ra bạn đã đọc tài liệu cho Play 1 và bạn đang cố gắng định cấu hình SSL cho Play 2, vì vậy, bạn đã đọc sai tài liệu –

+0

@ Li-o Tôi đã cập nhật thêm thông tin. Bạn có tài liệu cập nhật cho Play2 về cấu hình https không? Bạn có thể chia sẻ điều đó với tôi không ~? Cảm ơn rất nhiều ~ – Chris

Trả lời

24

Nó sẽ không hoạt động với cách tiếp cận bạn đang thực hiện. Bạn đang nhầm ghi chú phát hành của chi nhánh 1.x với chi nhánh 2.x.

trong chi nhánh 1.x, có thể. Ghi chú phát hành là đủ và họ đã làm việc cho tôi.

Đối với chi nhánh 2.1+, vui lòng tham khảo nhận xét của @ Christina. Hỗ trợ đã được thêm vào 2.1 và chuỗi thảo luận cung cấp chi tiết.

Trích dẫn trả lời James Roper của

Trong chế độ dev, nó rất dễ dàng, chỉ cần:

JAVA_OPTS = -Dhttps.port = 9443 chơi chạy

Play sẽ tạo ra một khóa bí mật và tự chứng chỉ đã ký, trong đó rõ ràng là trình duyệt của bạn sẽ gặp phải cảnh báo màu đỏ lớn. Nó sẽ sử dụng lại đã tạo chứng chỉ tự ký cho mỗi lần chạy tiếp theo của Play, do đó bạn chỉ gặp lỗi trình duyệt một lần. Rõ ràng là chứng chỉ tự ký này có lẽ không phải là thứ bạn muốn trong sản xuất . Một điều quan trọng cần lưu ý là việc tạo chứng chỉ tự ký sẽ chỉ hoạt động trên các JVM sử dụng các thư viện bảo mật mặt trời (ví dụ: Oracle và OpenJDK, nhưng đáng chú ý nhất là IBM J9). Trên các JVM không sử dụng chúng, bạn sẽ nhận được NoClassDefFoundError khi cố gắng tạo chứng chỉ.

Trong sản phẩm (và cấu hình này cũng áp dụng cho dev), bạn định cấu hình nhiều giống như cách bạn định cấu hình SSL thông thường trong Java, qua thuộc tính của hệ thống. Dưới đây là một bản tóm tắt:

https.port - Cổng nên được sử dụng

https.keystore - Đường dẫn đến keystore chứa khóa riêng và giấy chứng nhận, nếu không muốn nói cung cấp tạo ra một keystore cho bạn

https.keyStoreType - Chìa khóa loại cửa hàng, mặc định là "JKS"

https.keyStorePassword - Các mật khẩu, mặc định là ""

https.keyStoreAlgorithm - cửa hàng thuật toán quan trọng, mặc định là các thuật toán nền tảng mặc định

https.trustStore - Tính năng này chưa được thực hiện đầy đủ, hiện nay nó sẽ luôn luôn sử dụng các cửa hàng tin tưởng JDK cho việc xác minh chứng chỉ phía khách hàng (mà bạn lon tất nhiên cấu hình cho dù bạn cung cấp giá trị cho số này hay không, trừ khi bạn chỉ định "noCA", trong trường hợp này, nó sẽ sử dụng một kho lưu trữ ủy thác tất cả chứng chỉ không có xác thực hoặc xác minh, . xác minh chứng chỉ phụ.

Đối với 2,0 chi nhánh, bạn cần phải đặt máy chủ khác trước mặt chơi tức là một trong hai apache/nginx/khác mà lắng nghe trên https và chuyển các yêu cầu để chơi trong http.

Hướng dẫn để thiết lập một máy chủ front-end có sẵn tại http://www.playframework.org/documentation/2.0.1/HTTPServer

Vì vậy, chạy máy chủ chơi của bạn trên một cổng. Yêu cầu apache forward từ domain.com đến 127.0.0.1:9443.

mẫu apache cấu hình

<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> 

Hy vọng nó giúp.

+7

Mặc dù điều này là đúng vào thời điểm nó được viết cho tôi thêm ở đây hỗ trợ SSL đã được thêm vào Play 2.1 như được chỉ ra bởi [điều này Chủ đề của Google Groups] (https://groups.google.com/d/topic/play-framework/FeTUDQwaEPg/discussion). – Christina

+0

Cảm ơn bạn đã cập nhật. Tôi sẽ sửa đổi câu trả lời – Nasir

+0

Nếu tạo Chứng chỉ SSL, tức là không sử dụng chứng chỉ tự ký, khóa công khai của chứng chỉ được tạo có được nhập vào trình duyệt của ứng dụng khách không? –

4

Ngay bây giờ bạn dường như cần một proxy ngược quản lý SSL cho bạn. Tôi đã tìm thấy một số ticket và một số thread thảo luận về điều này.

+0

Cảm ơn bạn đã giúp đỡ ~ thông tin đọc, tôi sẽ tiếp tục xem vấn đề ~ – Chris

0

Một điều chúng tôi đã làm là sử dụng AWS ELB để xử lý SSL của chúng tôi, sau đó thiết lập chuyển tiếp SSL (HTTP - > HTTPS) bằng bộ lọc phát. Lợi ích chính, lấy tải SSL ra khỏi máy chủ của bạn và bạn không phải chạy Apache hoặc Nginx trước khi chơi (như một số giải pháp chỉ ra).

Bạn có thể xem câu trả lời của tôi ở đây: https://stackoverflow.com/a/23646948/690164

Tôi cũng viết thêm một chút về nó trong blog của tôi: http://www.mentful.com/2014/05/25/play-framework-filter-for-aws-elastic-load-balancer-forward-http-to-https/

0

Tôi đang sử dụng 3.0.3M securesocial. Đặt

securesocial.ssl = true 

trong securesocial.conf và bạn nên làm tốt. Sau đó khởi động lại SBT hoặc activator của bạn với

JAVA_OPTS=-Dhttps.port=9443 activator run 

Đến localhost: 9443

thưởng thức

3

này rất hữu ích cho https thử nghiệm tại địa phương:

activator "run -Dhttps.port=9005" 

Sau đó trỏ trình duyệt tới https://localhost:9005 .

Các vấn đề liên quan