Ssl

Glassfish JK SSL 偵聽器 502 錯誤網關

  • April 10, 2020

我已經建立了一個非常簡單的 Apache + Glassfish 集群配置。

如果我創建並使用使用預設 http-listener-1 的偵聽器,它工作正常。

但是,如果我切換到使用 http-listener-2 的安全偵聽器,則連接會建立,但隨後會因使用者收到 502 Bad Gateway 錯誤而斷開連接,並且我在 mod_jk.log 中有此消息

[Wed Dec 04 16:17:55.905 2019] [6957:139970911750336] [debug] jk_open_socket::jk_connect.c (674): socket TCP_NODELAY set to On
[Wed Dec 04 16:17:55.905 2019] [6957:139970911750336] [debug] jk_open_socket::jk_connect.c (711): socket SO_KEEPALIVE set to On
[Wed Dec 04 16:17:55.905 2019] [6957:139970911750336] [debug] jk_open_socket::jk_connect.c (763): timeout 300 set for socket=16
[Wed Dec 04 16:17:55.905 2019] [6957:139970911750336] [debug] jk_open_socket::jk_connect.c (798): trying to connect socket 16 to 10.0.10.4:28010
[Wed Dec 04 16:17:55.906 2019] [6957:139970911750336] [debug] jk_open_socket::jk_connect.c (824): socket 16 [10.0.30.4:39278 -> 10.0.10.4:28010] connected

other log entries in between....

[Wed Dec 04 16:17:55.907 2019] [6957:139970911750336] [debug] ajp_send_request::jk_ajp_common.c (1779): (worker1) request body to send 0 - request body to resend 0
[Wed Dec 04 16:17:55.909 2019] [6957:139970911750336] [debug] jk_shutdown_socket::jk_connect.c (931): About to shutdown socket 16 [10.0.30.4:39278 -> 10.0.10.4:28010]
[Wed Dec 04 16:17:55.909 2019] [6957:139970911750336] [debug] jk_is_input_event::jk_connect.c (1410): error event during poll on socket 16 [10.0.30.4:39278 -> 10.0.10.4:28010] (event=16)
[Wed Dec 04 16:17:55.909 2019] [6957:139970911750336] [debug] jk_shutdown_socket::jk_connect.c (1015): Shutdown socket 16 [10.0.30.4:39278 -> 10.0.10.4:28010] and read 0 lingering bytes in 0 sec.
[Wed Dec 04 16:17:55.909 2019] [6957:139970911750336] [info] ajp_connection_tcp_get_message::jk_ajp_common.c (1339): (worker1) can't receive the response header message from tomcat, tomcat (10.0.10.4:28010) has forced a connection close for socket 16

配置非常標準,唯一的區別是我使用的是由我的內部證書頒發機構建構的個人證書。證書已成功添加到密鑰庫,如果我直接通過埠 8181 訪問 Web 應用程序,它可以工作(帶有一些警告),我可以檢查我的證書。

這是 https.conf 部分

 # Sample app
 JkMount /sample loadbalancer
 JkMount /sample/* loadbalancer

worker.properties

worker.list=worker1,loadbalancer

# default properties for workers
worker.template.type=ajp13
worker.template.port=28010
worker.template.lbfactor=50
worker.template.connection_pool_timeout=600
worker.template.socket_keepalive=1
worker.template.socket_timeout=300

# properties for worker1
worker.worker1.reference=worker.template
worker.worker1.host=myhost.com

# properties for loadbalancer
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=worker1

這是 Glassfish 上的 jk 連接器,如您所見,它位於埠 28010 上,我已確保它已打開。

在此處輸入圖像描述

在花了一些時間調查這個問題並閱讀文件之後,我得出的結論是 JK 沒有使用 TLS。安全標誌僅適用於 http 偵聽器。

我嘗試過的一種可能的工作選項是在 HTTPD 和 Glassfish 實例之間打開一個隧道。這很容易,但它可能有一些缺點。最重要的是 SSH 連接可能會斷開。在這種情況下也可以建構一個重新啟動隧道的服務,但這超出了我的知識(和時間)。

因為實例所在的網路已經受到很好的保護,所以我最終通過非安全連接與 JK 通信。

引用自:https://serverfault.com/questions/994312