2010-08-24 41 views
8

Hãy để tôi giải thích tình huống của tôi.Tôi có thể chạy Tomcat an toàn trên cổng 443 và không an toàn trên 8080

Hiện nay, tôi có rất nhiều ứng dụng chạy trên Tomcat 6, trên cổng mặc định 8080.

tôi vừa tạo ra một số ứng dụng sẽ cần một bản ghi trong. Tôi sẽ mua một chứng chỉ SSL để cài đặt trên máy chủ này.

Tôi không thích ý tưởng sử dụng cổng 8443 vì nó làm cho URL phức tạp hơn. Nếu tôi chạy Tomcat trên cổng 80, tôi phải thay đổi hàng tá liên kết và tôi phải chạy Tomcat là root (thay vì tomcat).

Có sự cố nào khi chạy các ứng dụng không an toàn trên cổng 8080 nhưng có chạy an toàn trên cổng 443 không?

Tôi đang tưởng tượng thiết lập của tôi sẽ có URL mà trông như thế này:

http://mydomain.com:8080/report/controller?id=weather

https://mydomain.com/secure/controller?id=profile

Đây có phải là có thể?

+3

Sẽ không bạn phải chạy Tomcat như là người chủ cho cổng 443? – erickson

Trả lời

5

Có, nó hoàn toàn OK. Chỉ cần cấu hình các đầu nối để sử dụng các cổng tương ứng. Nhưng đối với 443 tôi đoán gốc cũng sẽ được yêu cầu.

+0

Mặc dù vậy, hãy báo trước nếu bạn đang sử dụng * nix và chạy không phải root vì chỉ root có thể liên kết với cổng <1024, nhưng không khó để tìm tài liệu về cách làm việc xung quanh. – nos

+1

Điều thông thường là liên kết với cổng và sau đó thả xuống một người dùng bình thường, có đặc quyền tối thiểu. Không biết làm thế nào Tomcat được thiết lập để xử lý (không có Apache httpd ở phía trước). –

36

Thiết lập trình kết nối HTTP trên 8080 và trình kết nối HTTPS trên 8443. Trong tuyên bố <Connector> thêm thuộc tính proxyPort và đặt thành cổng HTTP và HTTPS mặc định (tương ứng là 80 và 443). Thiết lập quy tắc chuyển hướng tường lửa từ 80 đến 8080 và từ 443 đến 8443. Sau đó, máy chủ sẽ chấp nhận URL http và https thông thường mà không cần chỉ định số cổng.

Dưới đây là bản kê khai mẫu của các đầu nối này.

<Connector 
    maxSpareThreads='75' 
    port='8080' 
    proxyPort='80' 
    enableLookups='false' 
    maxThreads='150' 
    connectionTimeout='20000' 
    disableUploadTimeout='true' 
    minSpareThreads='5' 
    maxHttpHeaderSize='8192' 
    redirectPort='443' 
    acceptCount='200' 
/> 

<Connector 
    SSLEnabled='true' 
    keystoreFile='/path/to/keystore.jks' 
    maxSpareThreads='75' 
    port='8443' 
    proxyPort='443' 
    algorithm='SunX509' 
    enableLookups='false' 
    secure='true' 
    maxThreads='150' 
    connectionTimeout='20000' 
    disableUploadTimeout='true' 
    scheme='https' 
    minSpareThreads='5' 
    maxHttpHeaderSize='8192' 
    sslProtocol='SSL' 
    acceptCount='200' 
    clientAuth='false' 
/> 

Và đây là một số chuyển hướng các lệnh iptables:

# Redirect external packets 
-A PREROUTING -j NAT-Port-Redirect 

# redirect http traffic 
-A NAT-Port-Redirect -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080 
# redirect https traffic 
-A NAT-Port-Redirect -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 8443 
+3

Mặc dù người đăng ký đánh dấu câu trả lời ở trên là câu trả lời, giải pháp của bạn tốt hơn nhiều. –

+5

Giải pháp tuyệt vời và sạch sẽ. Tôi đã làm điều này để chuyển hướng trên Ubuntu: iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8443. – hsnm

+0

Tôi đã làm theo các bước trên. Nhưng tôi nhận được Mã lỗi: ERR_SSL_VERSION_OR_CIPHER_MISMATCH –

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