我的后端服务器只使用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
答案 0 :(得分:0)
您应该单独上传证书(每个证书一个),并且您需要将整个信任证书链存储在您的信任库中。
Here是关于后端SSL的页面。
编辑: 这是我知道的一种方法:
1)将证书分成单独的PEM文件。不要在文件中放置多次证书。
2)使用openssl验证每个证书:
openssl x509 -noout -text -in <cert file name>
验证没有证书过期,并且Subject和Issuer字段创建所有证书的链,名称相同。
服务器的证书,根证书以及介于两者之间的所有证书都必须位于信任库中。