2014-02-24 158 views
1

我有一個只有SSL作爲defaut公共接口的後端服務器。此服務器在443上偵聽證書,密鑰和ca文件,ssl驗證客戶端設置爲true。SSL客戶端驗證失敗

在客戶端,我在單個ca.pem文件中將兩個CA文件組合在一起(中間CA,根CA)的客戶端證書,密鑰和ca文件。當我在我的後端服務器上進行curl請求時,它工作正常。我還使用gnutls-serv和openssl s_server測試了服務器/客戶端證書和密鑰,以確保所有內容都是有效的。

但是,當我創建Apigee(客戶端證書和密鑰文件[PEM格式])和trustore(ca.pem文件)的密鑰庫中,有一個錯誤: - target.name fsbca測試
- 屬性 - 表達( 「fsbca測試」 等於target.name)
- ExpressionResult真正
- 樹TARGET_fsbca測試
- 錯誤的服務暫時不可用 - error.cause一般SSLEngine的問題 - error.cause.cause一般SSLEngine問題 - error.class com.apigee.messaging.adaptors.http.HttpAdaptorException - 狀態TARGET_REQ_FLOW - 類型ErrorPoint

如果我把SSL驗證客戶端設置爲false在我的後端,然後請求被Apigee正確轉移,我得到響應。

如果我在目標端點屬性中將IgnoreValidationErrors設置爲true,那麼請求將被轉移到我的後端服務器,但是我可以在服務器日誌中看到錯誤:「客戶端在讀取c時未發送必需的SSL證書...」 。

任何關於我在做什麼錯的想法?

附加的軌道:它可能是Apigee方面的一個問題,由2個證書組成的CA文件(它可能會忽略在.pem中找到的尾隨證書)。如果想測試pkcs12和jks,但是我沒有將它們上傳到Apigee(API文檔頁面只描述了.pem,JAR和cert動作)。我使用pkcs12 keystore和jks trustore編寫了一個小型Java客戶端,並且它可以在本地工作站上正常工作。

非常感謝您提供任何有助於我的信息。

問候

神父

+0

你可以添加你的TargetEndpoint/SSLInfo配置嗎? –

+0

FsbcaKeystore FsbcaKey <! - 去除在PROD - > FsbcaTruststore user3030985

回答

0

您需要單獨上傳證書(每一個證書),你需要證書的整個信任鏈將被存儲在您的信任。

Here是關於SSL到您的後端的頁面。

編輯: 這是我知道的作品的方法:

1)獨立的證書到單獨的PEM文件。不要在一個文件中放置多個證書。

2)驗證每個證書用openssl:

openssl x509 -noout -text -in <cert file name> 

驗證沒有證書過期,並且所述主體和發行人字段創建所有的證書的鏈,具有相同的名稱。

服務器的證書,根證書以及其間的所有證書都需要位於信任庫中。

+0

我已經閱讀了這個頁面,這是使用自簽名證書。但是對於ca來說,這並不像預期的那樣工作。我將客戶端證書和密鑰放在密鑰庫中,並且將ca(2個文件)放在trustore中。我的後端服務器使用與ssl_client_certificate相同的ca文件。 – user3030985

+0

我的信任,現在由{ 「證書」: 「TrustServ」, 「TrustFsbca」, 「TrustMbca」], 「鑰匙」:[], 「名」: 「FsbcaTruststore」 },但它仍然失敗, SSL引擎處理錯誤。如上所述,我使用我的客戶機/服務器證書和CA文件密鑰進行openssl s_client + s_server測試,然後使用gnutls,然後使用nginx和curl(不使用-k)選項進行測試。我真的不明白什麼是運行所述配置的預期配置。在信任存儲區(第一個別名是我的服務器證書,fsbca是中間ca,mbca是根ca. Regards – user3030985

+0

如果目標無法驗證您的客戶端證書,則會發生此錯誤。當您使用curl直接對您的後端進行測試時,如果您的curl通信需要整個信任鏈,則您可以成功進行溝通,只需提供客戶端證書而不是整個客戶端證書的信任鏈,就可以將整個信任鏈連接成一個pem文件, (直到我研究了你的問題,我不知道這是被允許的)。或者,或者在目標上添加信任鏈本身。 –