Java 密码库偶尔无法启动

标签 java macos cryptography

我们有一个 Java 网络应用程序偶尔无法找到加密库。 目前重新启动应用程序可解决此问题。

以下预期出现在日志中,请参阅下面的完整堆栈跟踪。

java.lang.InternalError: Could not start up the CDSA libraries.
java.lang.NoClassDefFoundError: Could not initialize class com.apple.crypto.provider.HmacMD5

该应用程序使用 Java 1.6.0_15 构建,并部署到 1.6.0_13 上运行 Mac OS X 服务器 10.5.8 (9L30)

有什么想法吗?

干杯

乔诺

Build Java version
java version "1.6.0_13"
Java(TM) SE Runtime Environment (build 1.6.0_13-b03-211)
Java HotSpot(TM) 64-Bit Server VM (build 11.3-b02-83, mixed mode)

Deployed Jave version
java version "1.6.0_15"
Java(TM) SE Runtime Environment (build 1.6.0_15-b03-226)
Java HotSpot(TM) 64-Bit Server VM (build 14.1-b02-92, mixed mode)

Full stack trace:

java.lang.NoClassDefFoundError: Could not initialize class com.apple.crypto.provider.HmacMD5
       at java.lang.ClassLoader$NativeLibrary.load(Native Method)
       at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1881)
       at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1782)
       at java.lang.Runtime.loadLibrary0(Runtime.java:823)
       at java.lang.System.loadLibrary(System.java:1047)
       at com.apple.crypto.provider.HmacCore.<clinit>(HmacCore.java:26)
       at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
       at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
       at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
       at java.lang.Class.newInstance0(Class.java:355)
       at java.lang.Class.newInstance(Class.java:308)
       at java.security.Provider$Service.newInstance(Provider.java:1221)
       at javax.crypto.Mac.a(DashoA13*..)
       at javax.crypto.Mac.init(DashoA13*..)
       at com.sun.net.ssl.internal.ssl.MAC.<init>(MAC.java:94)
       at com.sun.net.ssl.internal.ssl.CipherSuite$MacAlg.newMac(CipherSuite.java:429)
       at com.sun.net.ssl.internal.ssl.Handshaker.newWriteMAC(Handshaker.java:407)
       at com.sun.net.ssl.internal.ssl.SSLSocketImpl.changeWriteCiphers(SSLSocketImpl.java:1791)
       at com.sun.net.ssl.internal.ssl.Handshaker.sendChangeCipherSpec(Handshaker.java:607)
       at com.sun.net.ssl.internal.ssl.ClientHandshaker.sendChangeCipherAndFinish(ClientHandshaker.java:868)
       at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverHelloDone(ClientHandshaker.java:794)
       at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:226)
       at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:516)
       at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:454)
       at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:884)
       at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1112)
       at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:623)
       at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59)
       at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
       at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
       at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:506)
       at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2114)
       at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096)
       at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
       at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
       at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
       at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)

最佳答案

您的错误并不意味着找不到该类。 “Could not initialize class com.apple.crypto.provider.HmacMD5”表示静态初始化 block (static { ... }) 导致异常。您是否可以访问 MmacMD5 的源代码?

我们曾经有一个类似的问题,静态 block 由于无法访问的 X 服务器而失败 - 但前提是没有启用 X 转发的 SSH session 到服务器可用。 (该类正在注册字体,以便稍后使用它们来渲染图像)

关于Java 密码库偶尔无法启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1569736/

相关文章:

java - Java keystore 中的 Lazysodium key

c++ - GCM 中的 Crypto++ AES 正在生成类似的密文

macos - 苹果应用商店 : circumvent sandbox requirement

security - 如何设计一个安全的 "self-destructing"电子邮件?

java - 在运行时切换 WebDriver 的 native 事件功能

java - 在变量名称前加上前缀以指示它们各自的范围或来源?

java - JFreeChart Boxplot Outlier 和 Farout 外观

java - jetty servlet : How can I forward GET request with parameters as POST request with JSON body?

c++ - 为其他平台编译

css - 升级到山狮与全新安装后的滚动条问题