Flutter项目运行时出现javax.net.ssl.SSLException: Tag mismatch错误求助
Flutter项目运行时SSL Tag mismatch错误排查与解决
错误日志
Exception in thread "main" javax.net.ssl.SSLException: Tag mismatch! at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:133) at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:371) at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:314) at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:309) at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:123) at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1513) at java.base/sun.security.ssl.SSLSocketImpl.readApplicationRecord(SSLSocketImpl.java:1484) at java.base/sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:1069) at java.base/java.io.BufferedInputStream.read1(BufferedInputStream.java:282) at java.base/java.io.BufferedInputStream.read(BufferedInputStream.java:343) at java.base/sun.net.www.MeteredStream.read(MeteredStream.java:141) at java.base/java.io.FilterInputStream.read(FilterInputStream.java:132) at java.base/sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:3678) at java.base/sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:3671) at org.gradle.wrapper.Download.downloadInternal(Download.java:62) at org.gradle.wrapper.Download.download(Download.java:44) at org.gradle.wrapper.Install$1.call(Install.java:61) at org.gradle.wrapper.Install$1.call(Install.java:48) at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:65) at org.gradle.wrapper.Install.createDist(Install.java:48) at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:128) at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:61) Caused by: javax.crypto.AEADBadTagException: Tag mismatch! at java.base/com.sun.crypto.provider.GaloisCounterMode$GCMDecrypt.doFinal(GaloisCounterMode.java:1486) at java.base/com.sun.crypto.provider.GaloisCounterMode.engineDoFinal(GaloisCounterMode.java:447) at java.base/javax.crypto.Cipher.doFinal(Cipher.java:2500) at java.base/sun.security.ssl.SSLCipher$T12GcmReadCipherGenerator$GcmReadCipher.decrypt(SSLCipher.java:1659) at java.base/sun.security.ssl.SSLSocketInputRecord.decodeInputRecord(SSLSocketInputRecord.java:264) at java.base/sun.security.ssl.SSLSocketInputRecord.decode(SSLSocketInputRecord.java:181) at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:111) ... 17 more Exception: Gradle task assembleDebug failed with exit code 1 Exited (sigterm)
环境检测结果(flutter doctor -v)
[√] Flutter (Channel stable, 2.8.0, on Microsoft Windows [Version 10.0.19045.2846], locale es-419) • Flutter version 2.8.0 at C:\src\flutter • Upstream repository https://github.com/flutter/flutter.git • Framework revision cf44000065 (1 year, 5 months ago), 2021-12-08 14:06:50 -0800 • Engine revision 40a99c5951 • Dart version 2.15.0 [√] Android toolchain - develop for Android devices (Android SDK version 33.0.2) • Android SDK at C:\Users\RUFDev\AppData\Local\Android\sdk • Platform android-33-ext5, build-tools 33.0.2 • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java • Java version OpenJDK Runtime Environment (build 17.0.6+0-b2043.56-9586694) • All Android licenses accepted. [√] Chrome - develop for the web • Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe [√] Android Studio (version 2022.2) • Android Studio at C:\Program Files\Android\Android Studio • Flutter plugin can be installed from: https://plugins.jetbrains.com/plugin/9212-flutter • Dart plugin can be installed from: https://plugins.jetbrains.com/plugin/6351-dart • Java version OpenJDK Runtime Environment (build 17.0.6+0-b2043.56-9586694) [√] VS Code (version 1.77.3) • VS Code at C:\Users\RUFDev\AppData\Local\Programs\Microsoft VS Code • Flutter extension version 3.62.0 [√] Connected device (3 available) • sdk gphone64 x86 64 (mobile) • emulator-5554 • android-x64 • Android 12 (API 31) (emulator) • Chrome (web) • chrome • web-javascript • Google Chrome 112.0.5615.138 • Edge (web) • edge • web-javascript • Microsoft Edge 112.0.1722.58 • No issues found!
项目依赖配置(pubspec.yaml)
version: 1.0.0+1 environment: sdk: ">=2.7.0 <3.0.0" dependencies: flutter: sdk: flutter cloud_firestore: ^3.1.7 flutter_localizations: sdk: flutter cupertino_icons: ^1.0.0 enum_to_string: ^1.0.14 firebase_auth: ^1.1.2 firebase_core: ^1.1.0 firebase_storage: ^8.0.2 firebase_messaging: ^11.2.6 firebase_crashlytics: ^2.5.1 flutter_rating_bar: ^3.2.0+1 flutter_svg: ^0.22.0 flutter_image_compress: ^1.1.0 flutter_camera_overlay: ^0.1.1 flutter_local_notifications: ^9.4.0 future_progress_dialog: ^0.1.1 image_picker: ^0.7.4 intl: ^0.17.0 logger: ^1.1.0 permission_handler: ^8.3.0 provider: ^6.0.2 string_validator: ^0.1.4 uuid: ^3.0.5 shared_preferences: ^2.0.13 geolocator: ^8.1.1 square_percent_indicater: ^0.1.0 internet_connection_checker: ^0.0.1+3 cached_network_image: ^3.2.0 sn_progress_dialog: ^1.0.3 lottie: ^1.2.2 camera: ^0.9.4+16 image_cropper: ^1.5.0 shimmer: ^2.0.0 google_sign_in: ^5.2.4 badges: ^2.0.2 flutter_sound: ^9.2.10 path_provider: ^2.0.9 url_launcher: ^6.1.0 fancy_shimmer_image: ^2.0.2 in_app_review: ^2.0.4 twilio_flutter: ^0.0.9 record_mp3: ^3.0.0 dev_dependencies: flutter_launcher_icons: ^0.9.2 flutter_native_splash: ^1.1.8+4 flutter_test: sdk: flutter
已尝试操作
- 切换不同Flutter版本,因依赖变更需大量修改代码,退回Flutter 2.8.0
- 安装Azul Java 8/11/15/17多个版本
- 测试Android 11/12模拟器
- 尝试依赖覆盖,但不清楚具体操作
解决建议
1. 清除Gradle缓存
- 删除本地Gradle缓存目录:
C:\Users\<你的用户名>\.gradle\caches - 执行命令:
flutter clean→flutter pub get
2. 临时切换Gradle下载为HTTP
修改项目gradle/wrapper/gradle-wrapper.properties中的distributionUrl:
distributionUrl=http\://services.gradle.org/distributions/gradle-7.3.3-all.zip
注意:生产环境建议改回HTTPS
3. 指定Java版本适配
在项目android/build.gradle中添加如下配置,强制使用Java 8:
android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = '1.8' } }
同时在Android Studio的Project Structure中,将JDK路径设置为Java 8的安装目录。
4. 覆盖冲突依赖
先执行flutter pub deps查看依赖树,找出冲突的依赖版本,然后在android/build.gradle中添加强制覆盖:
configurations.all { resolutionStrategy { force 'com.google.firebase:firebase-auth:21.0.1' force 'com.google.firebase:firebase-firestore:24.0.1' // 根据实际冲突情况调整版本号 } }
5. 检查网络代理
若使用代理,可能导致SSL握手异常:
- 关闭代理后重新构建
- 如需保留代理,在
gradle.properties中添加代理配置:
systemProp.http.proxyHost=你的代理地址 systemProp.http.proxyPort=你的代理端口 systemProp.https.proxyHost=你的代理地址 systemProp.https.proxyPort=你的代理端口
内容的提问来源于stack exchange,提问作者GAJOBAR
相关产品推荐
相关产品推荐

