SunTlsRsaPremasterSecret KeyGenerator不可用

Jil*_*ill 13 java macos

当我的应用程序尝试从JAVA加载RSA算法提供程序类时遇到错误.异常堆栈如下:

javax.jms.JMSException: RSA premaster secret error
at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:49)
at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1255)
at org.apache.activemq.ActiveMQConnection.ensureConnectionInfoSent(ActiveMQConnection.java:1350)
at org.apache.activemq.ActiveMQConnection.setClientID(ActiveMQConnection.java:388)
at com.trendmicro.tmsm.TMSMAgent.open(TMSMAgent.java:63)

Caused by: javax.net.ssl.SSLKeyException: RSA premaster secret error
at com.sun.net.ssl.internal.ssl.RSAClientKeyExchange.<init>(RSAClientKeyExchange.java:97)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverHelloDone(ClientHandshaker.java:634)
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 org.apache.activemq.transport.tcp.TcpBufferedOutputStream.flush(TcpBufferedOutputStream.java:115)
at java.io.DataOutputStream.flush(DataOutputStream.java:106)
at org.apache.activemq.transport.tcp.TcpTransport.oneway(TcpTransport.java:167)
at org.apache.activemq.transport.InactivityMonitor.oneway(InactivityMonitor.java:237)
at org.apache.activemq.transport.WireFormatNegotiator.sendWireFormat(WireFormatNegotiator.java:168)
at org.apache.activemq.transport.WireFormatNegotiator.sendWireFormat(WireFormatNegotiator.java:84)
at org.apache.activemq.transport.WireFormatNegotiator.start(WireFormatNegotiator.java:74)
at org.apache.activemq.transport.failover.FailoverTransport.doReconnect(FailoverTransport.java:715)
at org.apache.activemq.transport.failover.FailoverTransport$2.iterate(FailoverTransport.java:115)
at org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:122)
at org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:43)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:637)

Caused by: java.security.NoSuchAlgorithmException: SunTlsRsaPremasterSecret KeyGenerator not available
at javax.crypto.KeyGenerator.<init>(DashoA13*..)
at javax.crypto.KeyGenerator.getInstance(DashoA13*..)
at com.sun.net.ssl.internal.ssl.JsseJce.getKeyGenerator(JsseJce.java:223)
at com.sun.net.ssl.internal.ssl.RSAClientKeyExchange.<init>(RSAClientKeyExchange.java:89)
... 22 more
Run Code Online (Sandbox Code Playgroud)

我已经用Google搜索了错误消息,大多数帖子都说这是因为JVM无法找到sunjce_provider.jar.但是,我可以在/ Library/Java/Home/lib/ext文件夹中找到该文件.

该平台是Mac OS X 10.6,Java版本是1.6.0_17.

我的问题是:

  1. 为什么JVM不搜索jar文件的/ Library/Java/Home/lib/ext?
  2. 我们可以通过修改任何配置文件来更改CLASSPATH或java.ext.dirs属性吗?
  3. 有什么建议可以解决这个问题吗?

提前致谢.

alt*_*ano 26

升级到Mac上的新Java版本后,我遇到了同样的问题.我的(maven)项目从命令行运行正常,但在Eclipse中出现"SunTlsRsaPremasterSecret"错误.

解决方案是在Eclipse配置中删除已安装的JRE并再次添加它们(使用"搜索..."按钮).

  • 这对我也有用.我不得不从Preferences - > Java - > Installed JREs中删除所有JRE条目.它不允许我删除最后一个,所以我不得不用一个不同的名称添加一个,然后删除原始.然后重新添加它们. (3认同)

Riz*_*Riz 7

有一个类似的问题.将类路径添加到ext目录为我修复了它.这个修复程序在Windows 7上使用java 1.6工作

java -Djava.ext.dirs=lib -classpath "%java_home%\lib\ext\*" myapp.jar 
Run Code Online (Sandbox Code Playgroud)


Jil*_*ill 3

我认为我们找到了根本原因,所以这是我自己问题的答案。

  1. Mac OS X 10.5 中的 Java 系统属性“java.ext.dirs”为:/Library/Java/Extensions:/System/Library/Java/Extensions:/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0 /Home/lib/ext。sunjce_provider.jar 应该位于 /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/lib/ext 中,但也可以在问题 mac 中的 /Library/Java/Extensions/ 中找到。

  2. /Library/Java/Extensions/ 中的 sunjce_provider.jar 属于 Java Cryptography Extension(JCE) 1.2.2,已安装在 mac 中。JCE 1.2.2 是 J2SE 1.3.1 的可选包,可能不包含足够的 J2SE 1.4 及更高版本的库。

  3. 从 /Library/Java/Extensions/ 中删除所有 JCE 1.2.2 相关的 jar 文件后,Java 应用程序可以正常工作。