[Azkaban] EXCEPTION javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unkn

这个错误非常明确,它表示 Azkaban 在尝试建立 SSL/TLS 安全连接时,对方服务器返回的证书不被信任。

核心问题: 你的 Java 运行环境(JRE)的信任库(cacerts)中不包含签发对方服务器证书的根证书(Root CA)或中间证书(Intermediate CA)。因此,Java 无法验证该证书的合法性,出于安全考虑,它拒绝了连接并抛出了 certificate_unknown 错误。

这个问题通常发生在以下几种情况:

  1. 对方服务器使用的是自签名证书(自己签发的,非公共信任CA签发)。
  2. 对方服务器使用的是由私有 CA(公司内部或自己创建的证书颁发机构)签发的证书。
  3. 对方服务器证书链不完整(缺少中间CA证书)。
  4. 你的 Java 版本较旧,缺少较新的公共根证书。

解决方案(从易到难)

请根据你的实际情况选择以下方法进行排查和解决。

方法一:临时绕过证书验证(不推荐用于生产环境)

警告: 这种方法会完全禁用 SSL 证书验证,存在安全风险,仅用于临时测试或开发环境

你可以通过设置 Java 系统属性,让 Azkaban 忽略所有 SSL 证书错误。

  1. 修改 Azkaban 启动脚本
    找到 Azkaban 的启动脚本(如 azkaban-web-server.shazkaban-exec-server.sh)。
    JAVA_OPTSexecutorCommand 中添加以下参数:

    -Dcom.sun.jndi.ldap.object.disableEndpointIdentification=true \
    -Djavax.net.ssl.trustStore= \
    -Djavax.net.ssl.trustStorePassword=changeit \
    # 最关键的是下面这两个参数
    -Dcom.sun.webkit.nonValidCertificates=true \
    -Dazkaban.trustAllSslCerts=true
    

    更“暴力”的通用方法是设置以下参数,但这会影响所有 Java 应用的 SSL 行为

[root@hadoop1 azkaban-3.50.0]# sh gradlew build -x test Downloading https://services.gradle.org/distributions/gradle-4.6-all.zip Exception in thread "main" java.net.ConnectException: Connection refused (Connection refused) at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:589) at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:673) at sun.security.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:173) at sun.net.NetworkClient.doConnect(NetworkClient.java:180) at sun.net.www.http.HttpClient.openServer(HttpClient.java:463) at sun.net.www.http.HttpClient.openServer(HttpClient.java:558) at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:264) at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:367) at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191) at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1156) at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1050) at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177) at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1564) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492) at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:263) at org.gradle.wrapper.Download.downloadInternal(Download.java:66) at org.gradle.wrapper.Download.download(Download.java:51) at org.gradle.wrapper.Install$1.call(Install.java
最新发布
10-17
`java.net.ConnectException: Connection refused` 错误通常表示客户端尝试连接到服务器,但服务器拒绝了连接,可能是由于网络问题、服务器未运行、端口被阻塞等原因导致。以下是一些可能的解决方案: ### 检查网络连接 确保网络连接正常,尝试访问其他网站或服务,以验证网络是否可用。可以使用 `ping` 命令检查与 Gradle 下载服务器的网络连通性: ```bash ping services.gradle.org ``` ### 检查防火墙和代理设置 - **防火墙**:检查防火墙是否阻止了对 Gradle 下载服务器的访问。可以临时关闭防火墙进行测试,如果问题解决,则需要配置防火墙允许访问 `services.gradle.org`。 - **代理设置**:如果使用了代理,需要确保 Gradle 配置了正确的代理信息。可以在 `gradle.properties` 文件中添加以下内容: ```properties systemProp.http.proxyHost=your_proxy_host systemProp.http.proxyPort=your_proxy_port systemProp.https.proxyHost=your_proxy_host systemProp.https.proxyPort=your_proxy_port ``` 将 `your_proxy_host` 和 `your_proxy_port` 替换为实际的代理主机和端口。 ### 检查 Gradle 版本 尝试使用其他版本的 Gradle,有时候特定版本的 Gradle 可能存在下载问题。可以在 `gradle-wrapper.properties` 文件中修改 Gradle 版本: ```properties distributionUrl=https\://services.gradle.org/distributions/gradle-<version>-all.zip ``` 将 `<version>` 替换为其他可用的 Gradle 版本,如 `5.6.4`。 ### 手动下载 Gradle 分发文件 可以手动从 [Gradle 官方网站](https://gradle.org/releases/) 下载所需的 `gradle-4.6-all.zip` 文件,然后将其放置在 `~/.gradle/wrapper/dists/gradle-4.6-all` 目录下。再次执行 `sh gradlew build -x test` 命令时,Gradle 将使用本地下载的分发文件。 ### 清除 Gradle 缓存 Gradle 会缓存下载的文件,有时候缓存文件可能损坏导致下载失败。可以清除 Gradle 缓存,然后再次尝试下载: ```bash rm -rf ~/.gradle/caches/ ``` ### 检查服务器状态 访问 [Gradle 官方状态页面](https://status.gradle.com/) 或相关论坛,查看 Gradle 下载服务器是否正常运行。如果服务器出现故障,需要等待服务器恢复正常后再进行下载。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值