Ssl

Crucible Fisheye 伺服器的 TLS 設置

  • March 10, 2021

在過去的幾天裡,我們一直在嘗試使用 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 條目,然後找出為什麼沒有提供您的證書。它可能像密鑰庫的權限或 / 密鑰庫的格式 / 需要傳入證書名稱一樣簡單。

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