2010-05-20 26 views
10

जब मेरा एप्लिकेशन जावा से आरएसए एल्गोरिदम प्रदाता कक्षा लोड करने का प्रयास करता है तो मुझे एक त्रुटि आई। अपवाद ढेर के रूप में अनुवर्ती है:SunTlsRsaPremasterScrecret KeyGenerator उपलब्ध नहीं है

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 

मैं त्रुटि संदेश googled है और पदों के सबसे क्योंकि JVM sunjce_provider.jar नहीं मिल सकता है यह कहते हैं। हालांकि, मैं फ़ाइल/लाइब्रेरी/जावा/होम/lib/ext फ़ोल्डर में फ़ाइल पा सकता हूं।

प्लेटफ़ॉर्म मैक ओएस एक्स 10.6 और जावा संस्करण 1.6.0_17 है।

मेरे प्रश्न हैं:

  1. क्यों JVM खोज नहीं करता/पुस्तकालय/जावा/घर/lib/जार फ़ाइलों के लिए ext?
  2. क्या हम किसी भी कॉन्फ़िगरेशन फ़ाइल को संशोधित करके CLASSPATH या java.ext.dirs प्रॉपर्टी को बदल सकते हैं?
  3. इस समस्या को हल करने के लिए कोई सुझाव?

अग्रिम धन्यवाद।

उत्तर

2

मुझे लगता है कि हमें मूल कारण मिल गया है, इसलिए यहां मेरे अपने प्रश्न का उत्तर दिया गया है।

  1. Mac OS X 10.5 में जावा प्रणाली संपत्ति "java.ext.dirs" है: /पुस्तकालय/जावा/एक्सटेंशन:/सिस्टम/पुस्तकालय/जावा/एक्सटेंशन:/सिस्टम/लाइब्रेरी/Frameworks/JavaVM .framework/संस्करण/1.6.0/होम/lib/ext। Sunjce_provider.jar /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/lib/ext में होना चाहिए, लेकिन समस्या मैक में/लाइब्रेरी/जावा/एक्सटेंशन/में भी पाया जाना चाहिए।

  2. sunjce_provider.jar/लाइब्रेरी/जावा/एक्सटेंशन/जावा क्रिप्टोग्राफी एक्सटेंशन (जेसीई) 1.2.2 से संबंधित है, जो मैक में स्थापित किया गया है। जेसीई 1.2.2 जे 2 एसई 1.3.1 का एक वैकल्पिक पैकेज है और इसमें जे 2 एसई 1.4 और उसके बाद के लिए पर्याप्त पुस्तकालय शामिल नहीं हो सकते हैं।

  3. सभी जेसीई 1.2.2 संबंधित जार फ़ाइलों को लाइब्रेरी/जावा/एक्सटेंशन/से हटा दिए जाने के बाद सामान्य रूप से जावा एप्लिकेशन काम करता है।

18

मैक पर नए जावा संस्करण में अपग्रेड करने के बाद मुझे एक ही समस्या है। मेरा (मेवेन) प्रोजेक्ट कमांड लाइन से ठीक चला गया लेकिन एक्लिप्स में "SunTlsRsaPremasterSecret" त्रुटि मिली।

समाधान ग्रहण विन्यास में स्थापित जेआरई को हटाने और उन्हें फिर से जोड़ने ("खोज ..." बटन का उपयोग करके) था।

+2

यह मेरे लिए भी काम करता है। मुझे प्राथमिकताएं -> जावा -> स्थापित जेआरई से सभी जेआरई प्रविष्टियों को हटाना पड़ा। यह मुझे अंतिम को हटाने की अनुमति नहीं देगा, इसलिए मुझे एक अलग नाम के साथ एक बार वापस जोड़ना था और फिर मूल को हटा देना था। फिर उन सभी को फिर से जोड़ें। – Gray

+0

मेरे पास एक सिमलिंक फ़ोल्डर में मेरी ओर इशारा किया गया था जो जेडीके को इंगित करता था। ग्रहण के लिए सही फ़ोल्डरों को हटाने और पढ़ने के लिए मेरे लिए समस्या हल हो गई। –

+0

विंडोज 7, जेडीके 1.8.0_05 पर एक्लिप्स लुना में मेरा एक ही मुद्दा था; इस फिक्स ने काम किया, हालांकि इसे प्रभावी होने से पहले ग्रहण को बाद में पुनरारंभ करना पड़ा। – Sbodd

6

एक समान समस्या थी। क्लासपाथ को ext निर्देशिका में जोड़ना मेरे लिए तय किया गया है। इस फिक्स ने विंडोज 7 पर जावा 1.6

java -Djava.ext.dirs=lib -classpath "%java_home%\lib\ext\*" myapp.jar 
+0

धन्यवाद आदमी; तुमने मेरी दुनिया बचाई! इसने निराशाओं के कुछ घंटों के बाद भी मेरी समस्याओं को हल किया है – alpha

+0

मुझे एक ही समस्या का सामना करना पड़ रहा है। क्या आप कृपया मेरी पोस्ट पर एक नज़र डालें? http: //stackoverflow.com/questions/19432051/ssl-ioexceptionjavax-net-ssl-sslkeyexception-rsa-premaster-secret-error? noredirect = 1 # comment28809828_19432051 –

1

ग्रहण से टॉमकैट सर्वर लॉन्च करते समय यह मेरे साथ हुआ। मैंने विंडोज़ में कॉन्फ़िगरेशन को बदलकर हल किया -> प्राथमिकताएं -> जावा -> स्थापित जेआरई -> संपादित करें।मैं में फ़ोल्डर्स से इसी जार के साथ सभी JRE प्रणाली पुस्तकालयों को अद्यतन करने के लिए किया था:

  • % JAVA_HOME%/JRE/lib/ext
  • % JAVA_HOME%/JRE/lib/

ऐसा लगता है कि आखिरी अपडेट के बाद मैंने जेआरई_होम बदल दिया है लेकिन उन पुस्तकालयों को भूल गया है।

enter image description here

0

इस जबकि ग्रहण लूना में JavaMail का उपयोग करने की कोशिश कर रहा पर एक दिन के लगभग खर्च करने के लिए था। विभिन्न मंचों में सुझाए गए सभी दृष्टिकोणों का प्रयास किया, लेकिन कोई भाग्य नहीं।

पूरा प्रवाह में digged और पाया अपवाद के कारण कक्षा उत्पन्न होने वाली KeyAgreement.getInstance से BootClassPath

पर है() -> JceSecurity.canUseProvider() -> JceSecurity.getVerificationResult() -> JarVerifier। सत्यापित करें()

शून्य को सत्यापित() फेंकता JarException, IOException { अगर (jarURL == नल) { फेंक नई JarException ("क्लास bootclasspath पर है"); } .......

मैंने \ ext \ फ़ोल्डर से sunjce_provider jar को हटा दिया और अब मेल भेज सकता हूं। यह सही नहीं हो सकता है लेकिन कम से कम एक त्वरित कामकाज।

Eclipse bug देखें।

0

मुझे यह समस्या भी थी, ध्यान दिया कि समस्या मेरी ग्रहण विन्यास में थी।

Window > Preferences > Java > Installed JREs > jdk8_64bit > Edit... 

मेरी sunjce_provider.jar की राह jdk8_64bit\lib\ext\sunjce.provider.jar की ओर इशारा करते था। यह जेआरई के समकक्ष jdk8_64bit\jre\lib\ext\sunjce.provider.jar में इंगित करना चाहिए।

संबंधित मुद्दे