मैं ssh-keygen सार्वजनिक कुंजी को एक प्रारूप में कैसे परिवर्तित करूं जो कि Ps_read_bio_RSA_PUBKEY () फ़ंक्शन का उपभोग करेगा?


49

मैं एक सार्वजनिक कुंजी जनरेट कर रहा हूँ, जिसे ओपनसेल PEM_read_bio_RSA_PUBKEY()फ़ंक्शन उपभोग कर सकता है। मुझे त्रुटियाँ मिलती रहती हैं।

स्पष्ट रूप से मैं ssh-keygen <>.pubमुख्य फ़ाइल में एएससीआईआई स्ट्रिंग का उपयोग नहीं कर सकता क्योंकि यह एसएसएच फ़ाइल प्रारूप में है या मैं शायद SubjectPublicKeyInfoसंरचना।

यहाँ मुख्य जीन कोड है: ssh-keygen -t rsa -b 1024 -C "Test Key"

मुझे वेब पर php में एक कनवर्टर मिला, जो सार्वजनिक कुंजी की सामग्री को एक बेस 64 PEM ASCII स्ट्रिंग प्रारूप में बदल देगा। हालाँकि फ़ंक्शन अभी भी इसे पसंद नहीं करता है।

Openssl प्रलेखन राज्यों:

  1. "RSA_PUBKEY () फ़ंक्शन जो EVP_PKEY संरचना का उपयोग कर एक सार्वजनिक कुंजी को संसाधित करता है"
  2. "RSA_PUBKEY फ़ंक्शन भी RSA संरचना का उपयोग करके RSA सार्वजनिक कुंजी संसाधित करता है"

मैं अपनी OpenSSH सार्वजनिक कुंजी को किसी भी प्रारूप में कैसे प्राप्त करूंगा कि OpenSSL फ़ंक्शन इसका उपभोग करेगा?


यह पता लगाया:
खुलता

निजी कुंजी बनाएँ: Opensl genrsa -out test.priv.key 2048; समान प्रारूप में आउटपुट सार्वजनिक कुंजी (PEM?): Opensl rsa -in test.priv.key -pubout -out test.pub.key
PeteP

क्रॉस-संबंधित सुरक्षा
.stackexchange.com

जवाबों:


56

ठीक!

इसलिए मैं इस सोच में चला गया "आराम से, मुझे यह मिल गया।" मुझे लगता है कि यह भी की तुलना में यह करने के लिए एक पूरी बहुत अधिक है।

तो पहला मुद्दा यह है कि (ओपनएसएसएल (मैन 3 पीएम) के लिए मैन पेजों के अनुसार), ओपनएसएसएल आरएसए कुंजी को पीकेसीएस # 1 प्रारूप में होने की उम्मीद कर रहा है। स्पष्ट रूप से यह ssh-keygen के साथ काम नहीं कर रहा है। आपके पास दो विकल्प हैं (चारों ओर खोज करने से)।

यदि आपके पास OpenSSH v। 5.6 या बाद का संस्करण है (मैं अपने लैपटॉप पर नहीं था), तो आप इसे चला सकते हैं:

ssh-keygen -f key.pub -e -m pem

ऐसा करने का लंबा तरीका यह है कि आपकी SSH कुंजी को विभिन्न घटकों में तोड़ दिया जाए ( ब्लॉग प्रविष्टि में मुझे ओपनएसएसएच के "स्वामित्व" के आरोपों में कुछ मिला, मैं इसे "अनोखा" कहना पसंद करता हूं) और फिर ASN1 लाइब्रेरी का उपयोग करना चारों ओर चीजों को स्वैप करने के लिए।

सौभाग्य से आपके लिए, किसी ने ऐसा करने के लिए कोड लिखा:

https://gist.github.com/1024558


9
ssh-keygenविधि लिनक्स पर काम करने के लिए, लेकिन लगता है नहीं मैक ओएस एक्स
ढक्कन

3
Lid, SSH संस्करण के बारे में उत्तर में नोट देखें। ओएस एक्स ओपनएसएसएच के हाल के संस्करण को जहाज नहीं करता है। कमांड चलाएं ssh -V
ब्रायन रेडबर्ड जू

3
में काम नहीं करता है OpenSSH_6.2p2। में काम करता है OpenSSH_6.6p1
ओल्ड प्रो

-mमेरे लिए काम नहीं करता है ... चारों ओर काम क्या है?
पैंशनटन

2
मैक पर मेरे लिए काम करता है!
ग्रेग हॉर्नबी

18

मान लें कि आपके पास SSH निजी कुंजी है id_rsa, तो आप सार्वजनिक कुंजी को इसमें से निकाल सकते हैं:

openssl rsa -in id_rsa -pubout -out id_rsa.pub.pem

मुझे पता है कि ओपी ने सार्वजनिक कुंजी को बदलने के बारे में पूछा था, इसलिए यह सवाल का जवाब नहीं देता है, हालांकि मुझे लगा कि यह कुछ भी उपयोगी होगा।

यह भी ध्यान दें कि इस कमांड के परिणामस्वरूप PEM सार्वजनिक कुंजी प्रारूप है, जो आमतौर पर OpenSSL की अपेक्षा करता है। दूसरी ओर, ब्रायन के जवाब से RSAPublicKey प्रारूप में एक फ़ाइल निकलती है, जो OpenSSL द्वारा अपेक्षित सामान्य प्रारूप नहीं है (हालांकि बाद के संस्करण स्पष्ट रूप से -RSAPublicKey_inध्वज के माध्यम से इसे पढ़ सकते हैं )। परिवर्तित करने के लिए आप यह कर सकते हैं:

openssl rsa -RSAPublicKey_in -in id_rsa.rsapub.pem -pubout -out id_rsa.pub.pem

धन्यवाद, निजी कुंजी से -pubout ने मेरे लिए चाल चली।
शॉन डेबरी

openssl rsa -in id_rsa.pem -pubout -out id_rsa.pub.pemयह भी काम (यानी इनपुट पीएम प्रारूप निजी कुंजी है)। अच्छा उत्तर।
जॉनी वोंग

1
अपडेट: ब्रायन की जवाब देने के लिए सही किया गया है -m pkcs8जो गलत नाम का उपयोग OpenSSH लोगों के बावजूद है 509 'PUBKEY' पैदा करते हैं। इसके अलावा, 2014-01 में ओपनएसएसएच 6.5 के बाद से यदि निर्माता -oबेहतर सुरक्षा के लिए 'नया प्रारूप' निर्दिष्ट करता है, तो यह विधि काम नहीं करेगी, और 2018-08 में 7.8 के बाद से 'नया प्रारूप' अब डिफ़ॉल्ट, डिट्टो है।
dave_thompson_085

11

आप जो प्रारूप चाहते हैं वह ssh-keygenकॉल है PKCS8। तो निम्न कमांड वांछित उत्पादन का उत्पादन करेगा:

ssh-keygen -f key.pub -e -m pkcs8

से ssh-keygenआदमी पेज:

-m key_format
         Specify a key format for the -i (import) or -e (export) conversion 
         options.  The supported key formats are: 
         ``RFC4716'' (RFC 4716/SSH2 public or private key), 
         ``PKCS8'' (PEM PKCS8 public key) or 
         ``PEM'' (PEM public key).  
         The default conversion format is ``RFC4716''.

यह वास्तव में लिनक्स और मैकओएस दोनों पर काम करता है।
जे टेलर

OpenSSL में निजी कुंजी से बराबर जनरेट की गई सार्वजनिक कुंजी निकालने के लिए Opensl rsa -in key -pubout -out key.pub.openssl.pkcs8
मोहनंद

6

नीचे अमल चौधरी की विधि के समान है, यह मेरे लिए काम करता है। मुझे अपने SFTP क्लाइंट (साइबरडक) के लिए उत्पन्न ssh सार्वजनिक कुंजी से एक pem फ़ाइल बनाने की आवश्यकता थी।

openssl rsa -in ~/.ssh/id_rsa -outform pem > id_rsa.pem

यह वास्तव में काम नहीं करता है।
2123 पर 2123

5
यह केवल निजी आरएसए कुंजी के लिए काम करता है सार्वजनिक कुंजी ओपी नहीं पूछ रहा था। इतना गलत जवाब।
देवी

3
वास्तव में, id_rsaपहले से ही सही प्रारूप में है, आप इसे अपने आप से देख सकते हैं, जिसके परिणामस्वरूप id_rsa.pem100% समान है।
मिरो क्रोपसेक

-2

दूसरी साइट से ऐसा करने का दूसरा तरीका। यदि आपको किसी अन्य विधि की आवश्यकता है, तो इसे पोस्ट करना बहुत अच्छा काम करता है। http://www.chatur.com.np/2011/01/convert-openssh-rsa-key-to-pem-format.html

openssl dsa -in ~/.ssh/id_dsa -outform pem > id_dsa.pem

यह विधि वास्तव में काम नहीं करती है।
सीन

7
id_rsaसार्वजनिक कुंजी नहीं है। गलत जवाब।
अहमत अल्फ़ बाल्कन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.