使用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
相关产品推荐
相关产品推荐

