You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Maven部署Java Azure Function时遇SSL握手错误求助

问题分析与解决方案

核心问题

执行mvn azure-functions:deploy时触发javax.net.ssl.SSLHandshakeException,根源是Java信任库中缺少Microsoft Azure管理服务(management.azure.com)的SSL证书,导致PKIX路径构建失败,无法完成SSL握手。

环境信息

  • Java 8
  • Maven 3.8.5
  • Azure Functions Maven Plugin: 1.20.0
  • Azure Functions Java Library: 2.1.0
  • Azure SDK BOM: 1.2.5

解决方案

1. 导出并导入Azure管理服务证书

步骤1:获取management.azure.com的SSL证书

使用openssl命令导出证书(Windows用户可通过Git Bash或安装openssl工具执行):

openssl s_client -connect management.azure.com:443 </dev/null | openssl x509 -outform PEM > azure-management.crt

或通过浏览器访问https://management.azure.com,点击地址栏锁图标导出证书为PEM格式。

步骤2:将证书导入Java信任库

Java 8默认信任库路径为$JAVA_HOME/jre/lib/security/cacerts(Windows为%JAVA_HOME%\jre\lib\security\cacerts),默认密码为changeit。执行导入命令:

# Linux/macOS
keytool -importcert -file azure-management.crt -keystore $JAVA_HOME/jre/lib/security/cacerts -alias azure-management

# Windows
keytool -importcert -file azure-management.crt -keystore %JAVA_HOME%\jre\lib\security\cacerts -alias azure-management

执行时输入密码changeit,并确认信任该证书。

2. 处理代理环境下的证书问题

若使用公司代理网络,需额外导入代理服务器的SSL证书到Java信任库,同时可在Maven启动参数中指定信任库:

# Linux/macOS
export MAVEN_OPTS="-Djavax.net.ssl.trustStore=$JAVA_HOME/jre/lib/security/cacerts -Djavax.net.ssl.trustStorePassword=changeit"

# Windows
set MAVEN_OPTS="-Djavax.net.ssl.trustStore=%JAVA_HOME%\jre\lib\security\cacerts -Djavax.net.ssl.trustStorePassword=changeit"

3. 升级Azure Functions Maven插件

当前使用的1.20.0版本较旧,新版本可能修复了证书相关兼容性问题。更新POM中的插件版本至最新稳定版(需确认Java 8兼容性,例如4.x系列):

<azure.functions.maven.plugin.version>4.15.0</azure.functions.maven.plugin.version>

4. 重新验证Azure CLI认证状态

执行以下命令重新登录Azure CLI,确保订阅和认证状态正常:

az login
az account set --subscription <你的订阅ID>

内容的提问来源于stack exchange,提问作者user1953901

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 16:30:48