首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

解決 Java SFTP 上傳拋出 NoClassDefFoundError: sun.security.ec.SunEC 異常

     編輯:Java 綜合教學

解決 Java SFTP 上傳拋出 NoClassDefFoundError: sun.security.ec.SunEC 異常

在生產環境中,SFTP 文件上傳功能突然失效,拋出 java.lang.NoClassDefFoundError: Could not initialize class sun.security.ec.SunEC 異常。經排查,根因是客戶環境升級至 OpenJDK 1.7.0_111,導致安全提供者缺失。

異常堆棧信息

Caused by: java.lang.NoClassDefFoundError: Could not initialize class sun.security.ec.SunEC
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

環境信息

java version "1.7.0_111"
OpenJDK Runtime Environment (rhel-2.6.7.2.el6_8-x86_64 u111-b01)
OpenJDK 64-Bit Server VM (build 24.111-b01, mixed mode)

根因分析

OpenJDK 因版權限制,移除了 Oracle JDK 中的部分加密實現(如 SunEC),改用 NSS (Network Security Services) 作為替代。然而,系統自帶的 NSS 版本過舊(3.14.3),不支持所需的加密算法,導致 SunEC 類無法初始化。

參考 Red Hat Bugzilla: #1332867

解決方案:升級 NSS 庫

在客戶服務器上將 NSS 升級至 3.21 或更高版本,具體包包括:

  • nss-softokn-freebl-3.14.3-23.3.el6_8.x86_64
  • nss-3.21.0-8.el6.x86_64
  • nss-tools-3.21.0-8.el6.x86_64

升級命令示例(RHEL/CentOS):

yum update nss nss-softokn-freebl nss-tools

升級完成後重啟應用服務,SFTP 上傳功能恢復正常。

避坑指南

  • 不要盲目複製 SunEC.jar 到 jre/lib/ext:OpenJDK 運行時不會加載該類,且可能引發簽名驗證失敗。
  • 優先使用系統包管理器升級 NSS:確保依賴關係一致性,避免手動替換 so 文件導致的鏈接錯誤。
  • 長期建議:生產環境盡量使用 Oracle JDK 或采用 OpenJDK 8+ 版本,其內建了更完善的加密提供者支持。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved