【问题标题】:Hortonworks tutorial build fails with sun.security.provider.certpath.SunCertPathBuilderExceptionHortonworks 教程构建失败并出现 sun.security.provider.certpath.SunCertPathBuilderException
【发布时间】:2016-11-30 00:26:04
【问题描述】:

我正在尝试从“使用 NIFI、KAFKA 和 STORM 在 HADOOP 中进行实时事件处理”Hortonworks 教程中构建“流模拟器”,尤其是从其“实验室 0:使用 APACHE NIFI 摄取、路由和登陆实时事件”中。

http://hortonworks.com/hadoop-tutorial/realtime-event-processing-nifi-kafka-storm/#stream-simulator-lab0

为了让您大致了解这是什么,这里是 Hortoworks 页面的描述:“流模拟器是一个生成卡车事件数据的轻量级框架。模拟器使用定义驾驶员道路路径的纽约市卡车路线 (kml)带有纬度和经度信息。 该模拟器使用 Akka 来简化并发、消息传递和继承。它有两个普通的旧 Java 对象 (POJOS),一个用于卡车,另一个用于生成事件的驱动程序。”

当我尝试在构建结束时按照最新 Hortonworks Sandbox (HDP 2.4) 的指示构建模拟器时,Maven 报告此错误:

[ERROR] Failed to execute goal on project storm-kafka-0.8-plus: 
Could not resolve dependencies for project net.wurstmeister.storm:
storm-kafka-0.8-plus:jar:0.4: Failed to collect dependencies at org.apache.storm:storm-core:jar:
0.9.1-incubating -> clj-time:clj-time:jar:0.4.1: 
Failed to read artifact descriptor for clj-time:clj-time:jar:0.4.1: 
Could not transfer artifact clj-time:clj-time:pom:0.4.1 from/to clojars (https://clojars.org/repo/): 
sun.security.validator.ValidatorException: PKIX path building failed:    
sun.security.provider.certpath.SunCertPathBuilderException: 
unable to find valid certification path to requested target

更详细的(maven -e)揭示了这些错误细节:

...
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:385)
    at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292)
    at sun.security.validator.Validator.validate(Validator.java:260)
    at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:326)
    at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:231)
    at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:126)
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1454)
    ... 74 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:196)
    at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:268)
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:380)
    ... 80 more

这里是 pom.xml 导致构建错误:

<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                         http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.hortonworks</groupId>
<artifactId>storm-demo</artifactId>
<packaging>pom</packaging>
<version>1.0</version>
<name>Storm Demo Parent Project</name>

<modules>
    <module>transport-domain</module>
    <module>stream-simulator</module>
    <module>storm-streaming</module>
    <module>storm-demo-webapp</module>
    <module>storm-kafkaplus</module>
    <!-- <module>iot-integration-tester</module> -->
</modules>

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
</dependencies>

任何想法如何解决这个问题?请帮忙!

更新:下一次构建错误

修复证书问题后,我现在有下一个错误:

[INFO] ------------------------------------------------------------------------
[INFO] Building Storm Demo Parent Project 1.0
[INFO] ------------------------------------------------------------------------
Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-compiler-plugin/maven-metadata.xml
[WARNING] Could not transfer metadata org.apache.maven.plugins:maven-compiler-plugin/maven-metadata.xml from/to central (https://repo.maven.apache.org/maven2): sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] transport-domain ................................... SUCCESS [  2.233 s]
[INFO] stream-simulator ................................... SUCCESS [  3.694 s]
[INFO] storm-streaming .................................... SUCCESS [01:13 min]
[INFO] storm-demo-webapp .................................. SUCCESS [  8.642 s]
[INFO] storm-kafka-0.8-plus ............................... SUCCESS [ 17.440 s]
[INFO] Storm Demo Parent Project .......................... FAILURE [  0.171 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:45 min
[INFO] Finished at: 2016-07-26T14:15:46+00:00
[INFO] Final Memory: 119M/826M
[INFO] ------------------------------------------------------------------------
[ERROR] Error resolving version for plugin 'org.apache.maven.plugins:maven-compiler-plugin' from the repositories [local (/root/.m2/repository), central (https://repo.maven.apache.org/maven2)]: Plugin not found in any plugin repository 

【问题讨论】:

    标签: maven certificate apache-kafka apache-storm hortonworks-data-platform


    【解决方案1】:

    您的 maven 插件正在尝试连接到 https 远程存储库,即https://clojars.org/repo/

    您可以使用这篇文章中的一种解决方案:

    Problems using Maven and SSL behind proxy

    我推荐的解决方案是:

    (步骤可能因浏览器而异)

    • 使用浏览器(使用 chrome)转到https://clojars.org/repo/
    • 点击锁图标,选择“详细信息”,然后点击“查看证书”
    • 转到“详细信息”选项卡并选择“复制到文件”
    • 选择“Base 64 X.509 (.CER)”类型并将其保存在某处
    • 现在打开命令提示符并输入(使用您自己的路径):

      keytool -import -file C:\temp\mavenCert.cer -keystore C:\temp\mavenKeystore

    • 现在您可以使用参数再次运行命令

      -Djavax.net.ssl.trustStore=C:\temp\mavenKeystore

    • linux下使用绝对路径

      -Djavax.net.ssl.trustStore=/tmp/mavenKeystore

    现在您可以运行 maven build 为:

    /root/maven/bin/mvn clean package -Djavax.net.ssl.trustStore=C:\temp\mavenKeystore

    【讨论】:

    • 按照你的建议做了一切,仍然是同样的错误。在 linux 上,在创建密钥库时,keytool 会让您为这个新的密钥库设置密码。这个密码对maven来说可能是个问题吗?
    • 如果您为 keyotre 创建了密码,而不是向mvn 命令传递一个参数:javax.net.ssl.keyStorePassword=yourpwd - 有用的链接:maven.apache.org/guides/mini/guide-repository-ssl.html - 并非所有属性都必须根据您的精确设置进行设置:存储类型可以保留为默认值,密码可以为空。
    • 密钥库密码不是问题。构建失败,因为我使用了 clojars.org/repo 的证书而不是 clojars.org/repo/clj-time。现在我有另一个 maven 错误:[ERROR] Error resolve version for plugin 'org.apache.maven.plugins:maven-compiler-plugin' from the repositories [local (/root/.m2/repository), central (repo.maven.apache.org/maven2)] : 在任何插件库中都找不到插件。请在我更新的帖子中查看详细信息。
    • 终于建成了。最后一个问题与第一个问题相同。由于证书,Maven 无法访问repo.maven.apache.org/maven2/org/apache/maven/plugins/…。在使用插件存储库的 keytool 证书手动安装到本地密钥库后,maven 设法完成了构建。非常感谢您的帮助!
    猜你喜欢
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 2020-01-17
    • 2020-05-07
    • 1970-01-01
    相关资源
    最近更新 更多