Crucible Fisheye 伺服器的 TLS 設置
在過去的幾天裡,我們一直在嘗試使用 TLS 設置來設置 Fisheye。我們已經完成了使用公司內部 CA 設置 TrustStore 並使用主機級別證書設置單獨密鑰庫的過程。然後,我們使用排除和包含協議的 ssl 設置更新了 config.xml 文件。這是這樣的:
<web-server> <http bind=":80"/> <ssl truststore="/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/cacerts" keystore="/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/hosts.jks" keystore-password="****" bind=":443" truststore-password="*****"> <proxy-info/> <excludeProtocols> <protocol>SSLv1</protocol> <protocol>SSLv2</protocol> <protocol>SSLv3</protocol> <protocol>TLSv1</protocol> <protocol>TLSv1.1</protocol> </excludeProtocols> <includeProtocols> <protocol>TLSv1.2</protocol> </includeProtocols> </ssl> </web-server>
經過測試,我們在瀏覽器中不斷收到以下錯誤。
由於我們使用的是最新版本的 Chrome,我懷疑這與 Web 伺服器使用的密碼或密碼套件有關。但是,我找不到任何關於如何為 fisheye config.xml 設置它們的文件。我發現了一些使用反向代理伺服器的外掛,但是,這不是我們的選擇。我還找到了一篇與密鑰庫類型相關的文章,但這對我們沒有幫助。如果有任何關於如何在 config.xml 文件中設置密碼或密碼套件的文件。這將對我們有很大幫助。
如果這需要直接對 apache 進行更改,我們也對此持開放態度。
最後,如果這是發布此類問題的錯誤論壇,請告訴我們,我們會將其移至正確的論壇。
2019 年 4 月 23 日更新:Tim Brigham,感謝您的指導,
在執行以下命令時:
openssl s_client -connect fisheyetest.us.corp:443 -tls1_2
我們收到以下輸出:
CONNECTED(00000005) 140735531881416:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-22.50.3/libressl/ssl/s23_clnt.c:541: --- no peer certificate available --- No client certificate CA names sent --- SSL handshake has read 7 bytes and written 318 bytes --- New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE No ALPN negotiated ---
看來協商沒有得到密碼並且在嘗試使用 SSLv3 時失敗。有沒有辦法改變它。
更新:2019 年 4 月 25 日在昨晚和今天猛烈抨擊這件事之後,我一直沒能取得太大進展。這是我嘗試過的: - 從 config.xml 文件中刪除包含和排除的協議 - 檢查密鑰庫的權限。- 查看日誌(與 TLS 或 SSL 相關的錯誤或與密鑰庫或信任庫相關的錯誤) - 將密鑰庫類型從 JKS 更改為 pkcs12,反之亦然
使用 openssl 命令提供了相同的確切錯誤。如果我刪除 -tls1_2 參數,它也會這樣做。
我被這個難住了。我真的很驚訝這是如此困難。任何額外的建議將不勝感激。
3天后我能夠弄清楚。啊!。我必須將整個證書鏈包含在 p12 文件中,然後以非 pkcs12 格式導入密鑰庫。在信任庫中有我的 ca 引用是不夠的。這是我用來讓它工作的命令
首先,我使用以下命令生成了一個組合的 pkcs12 格式文件 (cert.p12)。
openssl pkcs12 -export -out cert.p12 -in host.pem -inkey key.pem -CAfile cacerts_root.pem -caname root -name jetty -certfile cacerts_int.pem
二、新建一個帶有pkcs12格式文件的store:
keytool -importkeystore -deststorepass ***** -destkeypass ***** -destkeystore /path/to/jks-file/host.p12 -srckeystore cert.p12 -srcstoretype PKCS12 -srcstorepass **** -alias jetty
最後,我使用適當的設置更新了 config.xml 文件:
<web-server> <http bind=":80"/> <ssl truststore="/path/to/trust-file/cacerts" truststore-password="*******" keystore="/path/to/jks-file/host.p12" keystore-password="********" bind=":443"><proxy-info/> </ssl> </web-server>
重新啟動,它出現了。這是一個巨大的痛苦。沒有日誌,沒有錯誤,文件方面也沒有太多。
我嘗試了 openssl 命令
openssl s_client -connect my.web.site:443
但這沒有幫助。它一直告訴我:
No client certificate CA names sent
必須有一些更好的工具來幫助診斷這些問題,或者 Atlassian / Jetty / Tomcat 應該創建這個工具。
謝謝
在您執行任何其他操作之前,您需要檢查您的實例實際提供的密碼。有幾種方法可以做到這一點,使用openssl s_client 或 nmap或者我更喜歡使用Wireshark 來擷取 SSL 握手
一旦您確切地確定了您提供的內容,就應該很容易看出您的連接失敗的原因。
編輯:根據您的輸出,您沒有提供伺服器證書。它應該幾乎在“已連接”輸出下方列出。我建議暫時關閉所有 excludeprotocol 條目,然後找出為什麼沒有提供您的證書。它可能像密鑰庫的權限或 / 密鑰庫的格式 / 需要傳入證書名稱一樣簡單。