এর দ্বারা ঘটেছে: java.security.UrerecoverableKeyException: কীটি পুনরুদ্ধার করা যায় না


84

আমাকে ABCC_client.store নামে একটি জিক্স কীস্টোর সরবরাহ করা হয়েছে। আমি যখন এই কীস্টোরটি ক্যাসর্টগুলিতে আমদানি করি এবং এটিকে সংযুক্ত করার চেষ্টা করি তখন বলে যে এরকম কোনও অ্যালগোরিদম ত্রুটি নেই। পিএফএ স্ট্যাকট্রেস

    Caused by: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class:   com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)
    at java.security.Provider$Service.newInstance(Provider.java:1245)
    at sun.security.jca.GetInstance.getInstance(GetInstance.java:220)
    at sun.security.jca.GetInstance.getInstance(GetInstance.java:147)
    at javax.net.ssl.SSLContext.getInstance(SSLContext.java:125)
    at javax.net.ssl.SSLContext.getDefault(SSLContext.java:68)
    at javax.net.ssl.SSLSocketFactory.getDefault(SSLSocketFactory.java:102)
    at org.apache.axis.components.net.JSSESocketFactory.initFactory(JSSESocketFactory.java:61)
    at org.apache.axis.components.net.JSSESocketFactory.create(JSSESocketFactory.java:79)
    ... 32 more
Caused by: java.security.UnrecoverableKeyException: Cannot recover key
    at sun.security.provider.KeyProtector.recover(KeyProtector.java:311)
    at sun.security.provider.JavaKeyStore.engineGetKey(JavaKeyStore.java:121)
    at sun.security.provider.JavaKeyStore$JKS.engineGetKey(JavaKeyStore.java:38)
    at java.security.KeyStore.getKey(KeyStore.java:763)
    at com.sun.net.ssl.internal.ssl.SunX509KeyManagerImpl.<init>(SunX509KeyManagerImpl.java:113)
    at com.sun.net.ssl.internal.ssl.KeyManagerFactoryImpl$SunX509.engineInit(KeyManagerFactoryImpl.java:48)
    at javax.net.ssl.KeyManagerFactory.init(KeyManagerFactory.java:239)
    at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.getDefaultKeyManager(DefaultSSLContextImpl.java:170)
    at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.<init>(DefaultSSLContextImpl.java:40)
    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)
    ... 39 more

তবে আমি যদি এই কীস্টোরটি স্বতন্ত্রভাবে ব্যবহার করি তবে এটি ক্যাসর্টে যুক্ত না করেই এটি কাজ করে।

কিছু গুগলিং আমাকে http://joewlaron.com/blog/2009/03/25/java-ssl-use-the-same-password-for-keystore-and-key/ এ নিয়ে যায় যা বলে যে পাসওয়ার্ডটি আমার পক্ষে আলাদা হতে পারে কী এবং কীস্টোর।


কোডটি যদি দেখতে পাওয়া যায় তবে কী সম্ভব?
ব্রুনো

আমি কোডের মধ্যে থেকে একটি ওয়েব পরিষেবা পদ্ধতিতে কল করার চেষ্টা করছিলাম..অ্যাক্সিসফাল্ট ফল্টকোড: { স্কিমাস.এক্সএমএলএসএপি.আর.সোপ / এনভেলপ } সার্ভার.সুগ্রহ এক্সপশন ফল্টসুবড: ফল্টস্ট্রিং: জাভা.net.সকেট এক্সসেপশন: জাভা.সিকিউরিটি.নোসুচ অ্যালগরিদম এক্সেপশন: ত্রুটি নির্মাণে বাস্তবায়ন (অ্যালগোরিদম: ডিফল্ট, সরবরাহকারী: সানজেএসএসই, শ্রেণী: com.sun.net.ssl.intern.ssl.DefaultSSLContextImpl)
মৃণাল ভট্টাচার্জি

4
এখানে নকল হতে পারে একটি asnwer সঙ্গে একই প্রশ্ন
আইক্রোভ্যাট

না যদি আমি সিস্টেমের বৈশিষ্ট্যগুলি সেই কীস্টোরটি ব্যবহার করার জন্য সেট করি তবে আমার ইস্যুটি কীস্টোরের কাজ নয়। তবে আমরা যদি সেই কীস্টোরটি jvm এর ডিফল্ট অর্থাৎ cacerts এ লোড করি তবে এটি ড্রেস্ট ক্রিক। এটি খারাপ শংসাপত্র বলেছে ..
মৃণাল ভট্টাচার্য

উত্তর:


109

টমক্যাট 6 এবং এর আগে ব্যবহার করা থাকলে, কীস্টোরের পাসওয়ার্ড এবং কী পাসওয়ার্ড একই রয়েছে তা নিশ্চিত করুন। টমকেট 7 এবং তারপরে ব্যবহার করা থাকলে, নিশ্চিত করুন যে সেগুলি একই বা server.xmlফাইলটিতে কী পাসওয়ার্ড নির্দিষ্ট করা আছে ।


10
এটা সত্য. রেফারেন্স tomcat.apache.org/tomcat-6.0-doc/…
অথর্ব

4
প্রাসঙ্গিক উক্তি: অবশেষে, আপনাকে মূল পাসওয়ার্ডের জন্য অনুরোধ জানানো হবে , যা বিশেষভাবে এই শংসাপত্রের জন্য পাসওয়ার্ড (একই কীস্টোর ফাইলে থাকা অন্য কোনও শংসাপত্রের বিপরীতে)। আপনি করতে হবে একই পাসওয়ার্ড এখানে ব্যবহার যেমন কীস্টোর পাসওয়ার্ড নিজেই জন্য ব্যবহার করা হয়েছিল। এটি টমক্যাট বাস্তবায়নের একটি বিধিনিষেধ। (বর্তমানে, keytoolপ্রম্পটটি আপনাকে বলবে যে ENTER কী টিপলে এটি আপনার জন্য স্বয়ংক্রিয়ভাবে হয়))
ক্যাপ্টেন ম্যান

আমার কাছে এই সমস্যাটি ছিল ডব্লু জেমেটার (https) কোজ জাভা কীস্টোর এবং কী পাসওয়ার্ডগুলি আলাদা ছিল। রেফ স্ট্যাকওভারফ্লো . com/ প্রশ্নগুলি / 2889238/… । সমস্যা সমাধানের জন্য কী পাসওয়ার্ড পরিবর্তন করতে। অসামান্য সাহায্য! ধন্যবাদ
ষি

টমক্যাট in-এ কেবলমাত্র ক্যাপ্টেনম্যানই সত্য, টমক্যাট from থেকে তা নয়
আন্দ্রে লিগিওস

4
@ আন্ড্রেইলজিওস ভাল পয়েন্ট, প্রাসঙ্গিক উক্তি: অবশেষে, আপনাকে মূল পাসওয়ার্ডের জন্য অনুরোধ জানানো হবে , যা এই শংসাপত্রের জন্য বিশেষত পাসওয়ার্ড (একই কীস্টোর ফাইলে থাকা অন্য কোনও শংসাপত্রের বিপরীতে)। keytoolপ্রম্পট আপনাকে বলবে যে টিপে কী লিখুন স্বয়ংক্রিয়ভাবে কীস্টোর যেমন কীয়ের জন্য একই পাসওয়ার্ড ব্যবহার করে। আপনি একই পাসওয়ার্ডটি ব্যবহার করতে বা একটি পছন্দসই নির্বাচন করতে পারেন। আপনি যদি কীস্টোরের পাসওয়ার্ডের জন্য আলাদা পাসওয়ার্ড নির্বাচন করেন তবে আপনাকে server.xmlকনফিগারেশন ফাইলে কাস্টম পাসওয়ার্ডও নির্দিষ্ট করতে হবে।
ক্যাপ্টেন ম্যান

73

আপনার অ্যাপ্লিকেশন / কনফিগারেশনে সংজ্ঞায়িত ব্যক্তিগত কী পাসওয়ার্ডটি ভুল। প্রথমে নীচের মতো অন্যটিতে পরিবর্তন করে ব্যক্তিগত কী পাসওয়ার্ড যাচাই করার চেষ্টা করুন:

keytool -keypasswd -new changeit -keystore cacerts -storepass changeit -alias someapp -keypass password

উপরের উদাহরণটি পাসওয়ার্ড থেকে পাসওয়ার্ড পরিবর্তনতে পরিবর্তন করে। এই কমান্ডটি সফল হবে যদি ব্যক্তিগত কী পাসওয়ার্ডের পাসওয়ার্ড ছিল।


4
যদিও আমি প্রশ্নের সাথে এই উত্তরটি ব্যবহার করি নি। এটি কোনও কীস্টোর ফাইল, স্টোরের পাসওয়ার্ড, ওরফে / কী এবং কী পাসওয়ার্ড যাচাইয়ের জন্য সহায়ক ছিল।
রাশ

4
দয়া করে মনে রাখবেন যে এই আদেশটি কার্যকর করার পরে আপনি কীস্টোরের পাসওয়ার্ড পরিবর্তন করবেন। আপনাকে মূল পাসওয়ার্ডটি আবার সেট করতে হবে।
gersonZaragocin

প্রকৃতপক্ষে, কেবলমাত্র নির্দিষ্ট করতে -keypasswd -keystore storefile -alias somealiasএবং প্রম্পটে সমস্ত কিছু প্রবেশ করার জন্য এটি যথেষ্ট ।
আন্দ্রে রেজেন্টভ

এই কোডটি চালাতে গিয়ে আমি নিম্নলিখিত ত্রুটিটি পেয়ে যাচ্ছি - "keytool error: java.security.UnrecoverableKeyException: Cannot recover key"আমার ওরফে কী পাসওয়ার্ডটি কী তা যাচাই বা পুরোনোটি না জেনে এটি পরিবর্তন করার কোনও উপায় আছে কি?
কাভিন রাজু এস

10

Cannot recover keyব্যতিক্রম না হওয়ার জন্য, আমার জাভা ইনস্টল করতে জাভা ক্রিপ্টোগ্রাফি এক্সটেনশন (জেসিই) আনলিমিটেড স্ট্রেংথ এখরডিশন পলিসি ফাইলগুলি প্রয়োগ করতে হয়েছিল যা আমার অ্যাপ্লিকেশনটি চালাচ্ছিল। এই ফাইলগুলির 8 সংস্করণটি এখানে পাওয়া যাবে বা সর্বশেষ সংস্করণটি এই পৃষ্ঠায় তালিকাবদ্ধ করা উচিত । ডাউনলোডের মধ্যে এমন একটি ফাইল রয়েছে যা নীতির ফাইলগুলি কীভাবে প্রয়োগ করতে হয় তা ব্যাখ্যা করে।


জেডিকে 8u151 সাল থেকে নীতি ফাইল যুক্ত করার প্রয়োজন নেই necessary পরিবর্তে জেসিই এখতিয়ার নীতি ফাইলগুলি কল করা সুরক্ষা সম্পত্তি দ্বারা নিয়ন্ত্রিত হয় crypto.policyunlimitedজেডিকে দ্বারা সীমাহীন ক্রিপ্টোগ্রাফি ব্যবহারের অনুমতি দেওয়ার সাথে এটি সেট করা । রিলিজ নোটগুলি উপরের রাজ্যের সাথে যুক্ত হিসাবে এটি ফাইলের Security.setProperty()মাধ্যমে বা মাধ্যমে সেট করা যেতে পারে java.securityjava.securityফাইল এছাড়াও যোগ করে সংযোজন করা যেতে পারে -Djava.security.properties=my_security.propertiesকমান্ড প্রোগ্রাম শুরু করার জন্য মত বিশদ এখানে


যেহেতু JDK 8u161 সীমাহীন ক্রিপ্টোগ্রাফিটি ডিফল্টরূপে সক্ষম করা হয়েছে।


4
পলিসি ফাইল জারের ইনস্টল থাকা সত্ত্বেও আমি এই ত্রুটিটি দেখছি।
আদম

@ অ্যাডাম আমার সমাধানটি একটি নির্দিষ্ট মামলার জন্য, যা আপনি অভিজ্ঞতার চেয়ে ভিন্ন হতে পারে। তবে আমি জেডিকে 8u151 এ পরিবর্তিত প্রতিফলনের জন্য একটি আপডেট যুক্ত করেছি।
হোয়াইটনাট

5

যখন আমরা একটি st৪ বিট ওপেনএসএসএল সংস্করণ ব্যবহার করে তৈরি করা একটি কীস্টোরের মধ্যে একটি কী আমদানি করি তখন আমারও একই ত্রুটি হয়েছিল। 32 বিট ওপেনএসএসএল সংস্করণ ব্যবহার করে তৈরি করা কী-স্টোরে কীটি আমদানি করার জন্য আমরা যখন একই প্রক্রিয়াটি অনুসরণ করি তখন সবকিছু ঠিকঠাক হয়ে যায়।


4
উপরের ত্রুটির মূল কারণটি ছিল জাভা.সিকিউরিটি n অপরিবর্তনযোগ্য কেইএক্সেপশন: কীটি পুনরুদ্ধার করা যায় না। এর কারণটি উপরে উল্লিখিত হিসাবে ভুয়া পাসওয়ার্ড হতে পারে, তবে bit৪ বিট ওপেনএসএসএল বাস্তবায়ন সহ কীস্টোর বিল্ডও হতে পারে। সুতরাং আমি আমার উত্তরটিকে অন্য সম্ভাব্য সমাধান হিসাবে বিবেচনা করি। এটি একই ত্রুটি পরিস্থিতিতে আমাকে সহায়তা করেছিল, তাই আমি সমাধানটি এখানে সরবরাহ করেছি।
হিমি

ওপেনসেল জাভা কীস্টোর ফাইল তৈরি করে না। আপনি এই পরিষ্কার করতে পারেন?
aled

আপনার উত্তর দেওয়ার জন্য ধন্যবাদ। Https ওয়েবসার্ভিসেস ওপেনইএসবি 3.05 ফর্মটি চালু করার সময় আমি একই সমস্যার মুখোমুখি হই। আমি আপনার নির্দেশাবলী অনুসরণ করি এবং জিক্স ফাইলটি আবার ওপেনএসএসের 32 বিট বাস্তবায়নের সাথে উত্পন্ন করি এবং এটি দুর্দান্ত কাজ করে
মার্টি

2

নীচের কমান্ডটি চালিয়ে আপনি যে পাসওয়ার্ডটি ব্যবহার করছেন তা সঠিক কিনা তা পরীক্ষা করে দেখুন

keytool -keypasswd -new temp123 -keystore awsdemo-keystore.jks -storepass temp123 -alias movie-service -keypass changeit

আপনি যদি নীচে ত্রুটি পেয়ে থাকেন তবে আপনার পাসওয়ার্ডটি ভুল

keytool error: java.security.UnrecoverableKeyException: Cannot recover key
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.