2015-04-06 89 views
0

我們有一個相對較舊的硬件運行客戶端應用程序,該應用程序需要通過TLS 1.0進行Web服務調用。服務器提供CA列表時,客戶端發生TLS 1.0握手問題

服務器有許多不同的客戶端,因此它支持TLS 1.0,1.1和1.2。因此,當服務器發送證書時,它也與CA列表一起。服務器已設置,以便客戶端可以選擇提供證書,但不是必需的。問題是,只要客戶端看到一個CA列表,就會發回一個FIN/ACK(關閉連接)。

這似乎是不正確的行爲。據TLS 1.0 RFC http://tools.ietf.org/html/rfc2246#section-7.4.2

注意,客戶端可以 發送沒有證書,如果沒有適當的證書 響應服務器的驗證請求發送。

推測客戶端正在看到CA的列表,並假設它需要提交證書,並且因爲沒有證書而導致徹底失敗。客戶端在沒有提供CA列表的情況下工作,我們可以通過禁用服務器上的TLS 1.1和1.2來強制執行。不幸的是,這在我們的生產環境中不是一種選擇。

我的問題是上述結論是否正確;客戶是否應該不用證書而不是關閉連接?

如果是這樣,我看到幾個選項:

  • 創建客戶端證書並安裝在每個客戶端設備
  • 打開服務器僅在一個單獨的端口上允許TLS 1.0這個客戶具體使用。
  • 支持票,對供應商的客戶端設備,並希望他們得到它固定或有一個解決方案(懷疑)

我們正朝着選項2傾斜,因爲它是我們最容易實現的解決方案。如果有人有任何其他方式來解決這個問題,我們將非常感激。

回答

2

我的問題是上述結論是否正確;客戶是否應該不用證書而不是關閉連接?

是。請參閱RFC 2246 #7.4.6 Client Certificate

僅當 服務器請求證書時纔會發送此消息。如果沒有合適的證書 可用,則客戶端應發送不包含證書的證書消息 。

完全清楚。

如果是這樣,我看到幾個選項:

  • 創建客戶端證書並安裝在每個客戶端設備

也許是最好的解決方案上,但它proobsbly也是最昂貴的。

  • 打開服務器上的單獨的端口只允許TLS 1.0到專門爲這個客戶端中使用。

我不明白爲什麼這應該是必要的。服務器應該已經知道他的客戶端正在從第一個ClientHello消息講TLS 1.0。我懷疑這個選項會改變什麼。如果是這樣,它會表明服務器有問題。

  • 支持票,對供應商的客戶端設備,並希望他們得到它固定或有一個解決方案(懷疑)

我肯定會做到這一點,你做其他。供應商違反了RFC 2256,因此發佈了無用的產品,並且可能不符合其自己的規範(這無疑會提及TLS 1.0)。

我們傾向於選項2,因爲它是我們實施的最簡單的解決方案。

正如我上面所說,我懷疑它會實際解決它。我認爲你應該參與供應商的支持渠道。