2014-02-24 47 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文件, (直到我研究了你的问题,我不知道这是被允许的)。或者,或者在目标上添加信任链本身。 –