এসএসএইচ-পিকে-প্রমাণীকরণে পরবর্তী ব্যবহারের জন্য পিকেসিএস 12 ফাইল থেকে সর্বজনীন / প্রাইভেট কী বের করুন


194

PKCS#12এসএসএইচ-পাবলিক-কী-প্রমাণীকরণে পরে ব্যবহারের জন্য আমি আমার ফাইল থেকে সর্বজনীন এবং ব্যক্তিগত কী বের করতে চাই ।

এই মুহুর্তে, আমি ssh-keygen এর মাধ্যমে কীগুলি উত্পন্ন করছি যা আমি .ssh/authorized_keyক্লায়েন্ট-সাইডে স্বতন্ত্র কোথাও রেখেছি ।

ভবিষ্যতে, আমি একটি PKCS#12ধারক থেকে কীগুলি ব্যবহার করতে চাই , তাই আমাকে প্রথমে সর্বজনীন-কীটি বের করতে হবে PKCS#12এবং তারপরে সেগুলি .ssh/authorized_keysফাইলে রেখে দিতে হবে। এই মাধ্যমে কাজ করার কোন সুযোগ আছে openssl? কীগুলি PKCS#12ssh- সর্বজনীন-কী প্রমাণীকরণের জন্য উপযুক্ত?

উত্তর:


283

আপনি কোনও পিকেসিএস # 12 ধারক থেকে পাবলিক / প্রাইভেট কী বের করার জন্য নিম্নলিখিত কমান্ডগুলি ব্যবহার করতে পারেন:

  • পিকেসিএস # 1 ব্যক্তিগত কী

    openssl pkcs12 -in yourP12File.pfx -nocerts -out privateKey.pem
    
  • সার্টিফিকেট:

    openssl pkcs12 -in yourP12File.pfx -clcerts -nokeys -out publicCert.pem
    

7
কমান্ডগুলি কাজ করে, তবে প্রাইভেট কীটি পিকেসিএস 1 ফর্ম্যাট হিসাবে রফতানি হয় এবং আমার পিকেসিএস 8 দরকার ... এটি পাওয়ার জন্য আমি কী কোনও বিকল্প অনুপস্থিত রয়েছি? উদাহরণস্বরূপ, এটি রফতানি করে '----- আরগেন প্রাইভেট কী -----' তবে আমার দরকার '----- শুরু করা প্রাইভেট কী -----'
এডিথার্ড

4
আপনি যে চেষ্টা করতে পারেন তা করতেopenssl rsa -in privateKey.pem -out private.pem
ফ্রাঙ্কোইস

27
@ অ্যাথথির্ড: পিকেসিএস ৮ পেতে নোড ফ্ল্যাগ যুক্ত করুন
ক্রিস্টোফার কে।

7
পাসওয়ার্ড ছাড়াই রফতানি করতে যোগ করুন -passout pass:। এটি প্যারামিটারটি ফর্ম পাস: মাইপ্যাসওয়ার্ডে থাকবে বলে প্রত্যাশা করে। stackoverflow.com/a/27497899/206277
nidheeshdas

2
@ChristopherK। ধন্যবাদ! এটা আমার জন্য ভাল ছিল। যোগ -nodesসঠিকভাবে রপ্তানি কী
TecHunter

85

কিছুটা ফর্ম্যাট রূপান্তর দিয়ে এটি সম্ভব।

একটি ফর্ম্যাটে প্রাইভেট কীটি বের করতে ওপেনশ ব্যবহার করতে পারেন:

openssl pkcs12 -in pkcs12.pfx -nocerts -nodes | openssl rsa > id_rsa

ব্যক্তিগত কীটিকে সর্বজনীন কীতে রূপান্তর করতে:

openssl rsa -in id_rsa -pubout | ssh-keygen -f /dev/stdin -i -m PKCS8

একটি ফর্ম্যাটে পাবলিক কীটি বের করার জন্য ওপেনশ ব্যবহার করতে পারেন:

openssl pkcs12 -in pkcs12.pfx -clcerts -nokeys | openssl x509 -pubkey -noout | ssh-keygen -f /dev/stdin -i -m PKCS8

2
ধন্যবাদ! প্রথম লাইনটি আমার প্রয়োজন ছিল। কেবল কী, এনক্রিপ্ট না করা, যাতে এটি বেশিরভাগ সিডিএন স্বয়ংক্রিয় সিস্টেমের মাধ্যমে ইনস্টল করা যায়।
বিটিসি

1
@ ফিলিপরেগো আমার মনে হয় আপনার সরকারী এবং ব্যক্তিগত কীগুলি বিভ্রান্ত হয়েছে। একটি আরএসএ পাবলিক কী দুটি মান, 'ই' পাবলিক এক্সপোনেন্ট এবং 'এন' মডিউলাস - উভয়ই কী এর ব্যক্তিগত অংশের পাশে সংরক্ষণ করা হয়।
রায়ান্ক

17

ওপেনএসএইচ বাক্সের বাইরে পিকেসিএস # 12 ফাইল ব্যবহার করতে পারে না। অন্যরা যেমন পরামর্শ দিয়েছে, আপনাকে অবশ্যই পিইএম ফর্ম্যাটে প্রাইভেট কীটি বের করতে হবে যা আপনাকে ওপেনএসএসএল এর জমি থেকে ওপেনএসএসএইচে নিয়ে আসে। এখানে উল্লিখিত অন্যান্য সমাধানগুলি আমার পক্ষে কাজ করে না। আমি ওপেন এক্স 10.9 ম্যাভেরিক্স (এই মুহুর্তে 10.9.3) "প্রিপেইকেজড" ইউটিলিটিগুলি (ওপেনএসএসএল 0.9.8y, ওপেনএসএসএইচ 6.2 পি 2) সহ ব্যবহার করি।

প্রথমে, পিইএম ফর্ম্যাটে একটি প্রাইভেট কী বের করুন যা সরাসরি ওপেনএসএইচ দ্বারা ব্যবহৃত হবে:

openssl pkcs12 -in filename.p12 -clcerts -nodes -nocerts | openssl rsa > ~/.ssh/id_rsa

আমি পাসওয়ার্ড সহ প্রাইভেট কী এনক্রিপ্ট করার দৃ strongly়ভাবে পরামর্শ দিচ্ছি:

openssl pkcs12 -in filename.p12 -clcerts -nodes -nocerts | openssl rsa -passout 'pass:Passw0rd!' > ~/.ssh/id_rsa

স্পষ্টতই, কমান্ড-লাইনে একটি সরল-পাঠ্য পাসওয়ার্ড লেখাই নিরাপদ নয়, সুতরাং আপনার ইতিহাস থেকে শেষ কমান্ডটি মুছে ফেলা উচিত বা এটি নিশ্চিত না হওয়া নিশ্চিত করা উচিত। বিভিন্ন শেলের বিভিন্ন উপায়ে রয়েছে। বাশ এবং অন্যান্য অনেক শেলের ইতিহাসে সংরক্ষণ থেকে বাঁচতে আপনি আপনার কমান্ডটিকে স্থান দিয়ে উপসর্গ করতে পারেন। বাশের ইতিহাস থেকে কমান্ডটি কীভাবে মুছবেন তা এখানেও রয়েছে:

history -d $(history | tail -n 2 | awk 'NR == 1 { print $1 }')

বিকল্পভাবে, আপনি ওপেনএসএসএলে একটি ব্যক্তিগত কী পাসওয়ার্ডটি পাস করার জন্য বিভিন্ন উপায়ে ব্যবহার করতে পারেন - পাস বাক্যাংশের আর্গুমেন্টগুলির জন্য ওপেনএসএসএল ডকুমেন্টেশনের সাথে পরামর্শ করুন ।

তারপরে, একটি ওপেনএসএসএইচ পাবলিক কী তৈরি করুন যা অনুমোদিত_কিজ ফাইলগুলিতে যুক্ত করা যেতে পারে:

ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub

কি | openssl rsaজন্য স্টাফ?
স্নেকসে

1
@ স্নেকস এটি নিশ্চিত করে যে আউটপুটে কেবলমাত্র ব্যক্তিগত কী আছে। আমার ক্ষেত্রে ~/.ssh/id_rsaএটি “| ছাড়া ব্যাগ অ্যাট্রিবিউটসের মতো কিছু" ক্রাফ্ট "দিয়ে পরিচয় ফাইল ( ) তৈরি করে openssl rsa`। আমি ধারণা করি যে ওপেনএসএসএইচ এবং অন্যান্য ইউটিলিটিগুলি যা পরিচয় ফাইল ব্যবহার করে সে ক্রাফ্টটি পরিচালনা করতে পারে (আমি চেষ্টা করি নি), তবে আমি কেবলমাত্র প্রয়োজনীয় ডেটা এবং আরও কিছুই সরবরাহ করতে ব্যবহৃত হয় না, বিশেষত যদি এটি সুরক্ষা সম্পর্কিত কিছু থাকে।
ফ্রিজং

1
এই উত্তরটি আমার পক্ষে টার্মিনালের পিইএম-ফর্ম্যাট বেসরকারী কীতে অ্যাক্সেস পাওয়ার জন্য কাজ করেছিল, যা আমি অনুলিপি / পেস্ট করতে পেরেছিলাম: openssl pkcs12 -in filename.p12 -clcerts -nodes -nocerts
বিলিআরাইক্রাস

7

সমাধান 1:

Jks থেকে পি 12 উত্তোলন করুন

keytool -importkeystore -srckeystore MyRootCA.jks -destkeystore MyRootCA.p12 -deststoretype PKCS12

পি 12 এবং পিডিএম সম্পাদনা করুন ফাইল এবং পিআরটি ফাইল থেকে পিএম

openssl pkcs12 -in MyRootCA.p12 -clcerts -nokeys -out MyRootCA.crt

Jks থেকে কী বের করুন

openssl pkcs12 -in MyRootCA.p12 -nocerts -out encryptedPrivateKey.pem
openssl rsa -in encryptedPrivateKey.pem -out decryptedPrivateKey.key

সমাধান 2:

টেক্সট ফাইল``` এ পিইএম এবং এনক্রিপ্ট করা প্রাইভেটকি কে বের করুন ```

openssl pkcs12 -in MyRootCA.p12 -out keys_out.txt

প্রাইভেটকি ডিক্রিপ্ট করুন

openssl rsa -in encryptedPrivateKey.key [-outform PEM] -out decryptedPrivateKey.key

1
প্রশ্নের উত্তর দেওয়ার সময় আদেশগুলি কী তা হাইলাইট করতে সহায়তা করে। কমান্ডের আগে এবং পরে তিনটি ব্যাককোট যুক্ত করে আপনি এটি করতে পারেন যাতে cho ` echo hello। হ্যালো``` হয়ে যায় ।
প্যাটস

2

আপডেট: আমি লক্ষ্য করেছি যে আমার উত্তরটি BryKKan দ্বারা https: //unix.stackexchange.com / ... এ একটি সুস্পষ্ট ব্যাখ্যা করা প্রশ্নের একটি দুর্বল নকল was

এটি থেকে একটি এক্সট্র্যাক্ট এখানে:

openssl pkcs12 -in <filename.pfx> -nocerts -nodes | sed -ne '/-BEGIN PRIVATE KEY-/,/-END PRIVATE KEY-/p' > <clientcert.key>

openssl pkcs12 -in <filename.pfx> -clcerts -nokeys | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <clientcert.cer>

openssl pkcs12 -in <filename.pfx> -cacerts -nokeys -chain | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <cacerts.cer>

3
কিছু ব্যাখ্যা যুক্ত করা এই উত্তরটি আরও দরকারী করে তুলবে।
mx0

0

আমি যতদূর জানি পিকেসিএস # 12 কেবল একটি শংসাপত্র / পাবলিক / প্রাইভেট কী স্টোর। আপনি যদি পিকেসিএস # 12 ফাইল থেকে সর্বজনীন কী বের করেন তবে ওপেনএসএসএইচ এটি পিএম ফর্ম্যাটে যতক্ষণ না এক্সট্রাক্ট করা হয়েছিল ততক্ষণ এটি ব্যবহার করতে সক্ষম হবে। আপনি সম্ভবত ইতিমধ্যে জেনে গেছেন যে এটিতে ssh- সার্বজনীন-কী প্রমাণীকরণের জন্য আপনাকে একটি প্রাইভেট কী ( পিএম তেও ) প্রয়োজন need


0

গৃহীত উত্তরটি হ'ল সঠিক আদেশ, আমি কেবল একটি অতিরিক্ত জিনিস যুক্ত করতে চাই, কীটি বের করার সময় আপনি যদি পিইএম পাসওয়ার্ড ( "Enter PEM pass phrase:") ফাঁকা রেখে যান তবে সম্পূর্ণ কীটি বের করা হবে না তবে কেবলমাত্রlocalKeyID উত্তোলন করা হবে। সম্পূর্ণ কীটি পেতে আপনাকে নীচের কমান্ডটি চালাচ্ছেন এমন একটি পিইএম পাসওয়ার্ড উল্লেখ করতে হবে।

দয়া করে মনে রাখবেন যে পাসওয়ার্ড আমদানি করার ক্ষেত্রে, আপনি প্রকৃত পাসওয়ার্ড নির্দিষ্ট করতে পারেন "Enter Import Password:"বা এই পাসওয়ার্ডটি ফাঁকা রাখতে পারেন:

openssl pkcs12 -in yourP12File.pfx -nocerts -out privateKey.pem

1
এটি উত্তর হিসাবে নয়, গৃহীত উত্তরের একটি মন্তব্য হওয়া উচিত।
Styx
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.