javax.net.ssl.SSLHandshakeException:连接到安全端口时出现java.security.cert.CertificateException

时间:2016-10-04 17:22:06

标签: java ssl websphere-liberty

当我的一台服务器尝试连接到安全端口时,我收到SSL异常。

javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: PKIXCertPathBuilderImpl could not build a valid CertPath. java.security.cert.CertificateException: PKIXCertPathBuilderImpl could not build a valid CertPath. PKIXCertPathBuilderImpl could not build a valid CertPath

我在jvm.options中设置了信任存储:

-Djavax.net.ssl.trustStore=/home/rpp/TrustStore
-Djavax.net.ssl.trustStorePassword=passw0rd
-Djavax.net.ssl.trustStoreType=jks

在server.xml中我添加了

<keyStore id="defaultKeyStore" location="/root/ssl/bmx-zuu.net.jks" password="passw0rd" />

我还需要添加其他设置吗?

2 个答案:

答案 0 :(得分:2)

您可能想尝试在Liberty上定义SSL配置,如下所示。密钥库的定义与上面定义完全相同,但在server.xml中添加了TrustStore。假设TrustStore.jks具有签名者证书以与服务器建立信任。

<ssl id="defaultSSLConfig" keyStoreRef="defaultKeyStore" trustStoreRef=“myTrustStore"/>
        <<keyStore id="defaultKeyStore" location="/root/ssl/bmx-zuu.net.jks" password="passw0rd" />
        <keyStore id=“myTrustStore" location="${server.config.dir}/TrustStore.jks" password="mypassword" type="JKS"/>

答案 1 :(得分:0)

尝试使用

import math.{max,min}

case class FG(f: Int, g: Int) {
  def combine(that: FG) =
    FG(max(f, that.f), min(g, that.g))
  def result = f - g 
}

val result = {
  rdd
  .map{ case Array(_, _, c, _, e, f, g, _, _) => 
    ((c, e), FG(f, g)) }
  .reduceByKey(_ combine _)
  .map{ case ((c, _), fg) =>
    (c, fg.result) }
  .reduceByKey(_+_)  
}

查看输出并确定证书的主题和颁发者是什么。

验证证书的颁发者是否在您的TrustStore文件中。

如果这是从中间CA发出的,则服务器应该将发布链呈现到路径的根目录(减去根CA)。您的信任库应包含根CA证书。