SSL客户端验证失败

时间:2014-02-24 15:50:03

标签: ssl keystore apigee truststore ca

我的后端服务器只使用SSL作为defaut公共接口。此服务器在443上侦听cert,key和ca文件,ssl verify client设置为true。

在客户端,我在一个ca.pem文件中拥有客户端证书,密钥和由两个CA文件组成的ca文件(中间CA,根CA)。当我在后端服务器上进行卷曲请求时,它工作正常。我还使用gnutls-serv和openssl s_server测试了服务器/客户端证书和密钥,以确保所有内容都有效。

但是当我在Apigee(客户端证书和密钥文件[pem格式])和信任(ca.pem文件)上创建密钥库时,会出现错误: - target.name fsbca-test
- 属性 - 表达式(“fsbca-test”等于target.name)
- ExpressionResult true
- 树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方面的问题,CA文件由2个证书组成(它可能会忽略.pem中的尾随证书)。如果想测试pkcs12和jks但是我没有将它们上传到Apigee(API文档页面只描述.pem,JAR和cert动作)。我用pkcs12密钥库和jks trustore编写了一个小型Java客户端,它在我的本地工作站上运行良好。

提前感谢您提供有助于我的任何信息。

此致

R

1 个答案:

答案 0 :(得分:0)

您应该单独上传证书(每个证书一个),并且您需要将整个信任证书链存储在您的信任库中。

Here是关于后端SSL的页面。

编辑: 这是我知道的一种方法:

1)将证书分成单独的PEM文件。不要在文件中放置多次证书。

2)使用openssl验证每个证书:

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

验证没有证书过期,并且Subject和Issuer字段创建所有证书的链,名称相同。

服务器的证书,根证书以及介于两者之间的所有证书都必须位于信任库中。