1

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

在客户端,我有客户端证书、密钥和一个 ca 文件,该文件由 2 个 CA 文件(中间 CA、根 CA)组合在一个 ca.pem 文件中。当我在后端服务器上执行 curl 请求时,它工作正常。我还使用 gnutls-serv 和 openssl s_server 测试了服务器/客户端证书和密钥,以确保一切都有效。

但是当我在 Apigee(客户端证书和密钥文件 [pem 格式])和 trustore(ca.pem 文件)上创建密钥库时,出现错误:- target.name fsbca-test
- Properties - Expression ("fsbca-test " 等于 target.name)
- ExpressionResult true
- Tree TARGET_fsbca-test
- 错误服务暂时不可用 - 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 客户端,它在我的本地工作站上运行良好。

提前感谢您提供任何可以帮助我的信息。

问候

神父

4

1 回答 1

0

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

是有关 SSL 到您的后端的页面。

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

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

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

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

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

服务器的证书、根证书以及介于两者之间的所有证书都需要在信任库中。

于 2014-02-24T17:11:09.053 回答