2011-01-20 12 views
5

में द्विआधारी कुंजी मैं एक विशेष निजी कुंजी बाइनरी DER प्रारूप (PKCS#8) रूबी में में एन्कोड लोड करने के लिए कोशिश कर रहा हूँ।लोड PKCS # 8 रूबी

हालांकि, OpenSSL::PKey इसे पहचान नहीं होगा। मैं इसे कुछ सांत्वना काम कर रही है और एक PEM तो जैसे और इसे एक से काम कर सकते हैं:

openssl pkcs8 -inform DER -in file.key -passin pass:xxxxxxxx >private_key.pem 

इस के बाद, कुंजी सही तरीके से पढ़ा जा सकता है।

हालांकि, क्योंकि मैं फाइलों को लिखने और पढ़ने की बजाय स्मृति में पूरी प्रक्रिया को पूरा करना चाहता हूं।

तो मेरा सवाल यह है: क्या रूबी/ओपनएसएसएल में बाइनरी एन्कोडेड DER प्रारूप से निजी कुंजी लोड करना संभव है?

अपने समय के लिए धन्यवाद,

फर्नांडो

उत्तर

0

प्रमाणपत्र DER- एन्कोड प्रमाण पत्र और प्रमाण पत्र OpenSSL के PEM प्रारूप में इनकोडिंग से निपटने में सक्षम है।

आप रूबी here के लिए OpenSSL कार्यान्वयन के बारे में दस्तावेज़ मिल सकता है:

+0

यह गलत है। पीईएम के लिए, रूबी स्रोत PEM_read_bio_RSAPrivateKey को कॉल करता है, जो PEM_read_bio_PrivateKey को कॉल करता है, जो हां, PKCS # 8 को संभालता है। हालांकि, जब डीईआर, रूबी स्रोत d2i_RSAPrivateKey_bio को कॉल करता है, जो ASN1_item_i2d_bio (ASN1_ITEM_rptr (RSAPrivateKey), बीपी, आरएसए) (openssl-1.0.1m/crypto/rsa/rsa_asn1.c: ASN1_SEQUENCE_cb (RSAPrivateKey, rsa_cb) = {ASN1_SIMPLE (RSA , संस्करण, लंबा), ...) जो * पीकेसीएस # 8 * नहीं पढ़ेगा। डीईआर-एनकोडेड पीकेसीएस # 8 * ओपनएसएसएल :: पीकेई :: आरएसए.न्यू का उपयोग करके सीधे लोड नहीं किया जा सकता है। –

+0

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

2

हाँ, आप कर सकते हैं परोक्ष रूप से लोड PKCS # 8 DER- एन्कोड निजी कुंजी रूबी OpenSSL का उपयोग कर।

OpenSSL::PKey::RSA.new केवल पीईएम-स्वरूपित पीकेसीएस # 8 को संभालेगा, लेकिन बाइनरी डीईआर को पढ़ना और इसे पीईएम-स्वरूपित स्ट्रिंग में परिवर्तित करना और फिर स्ट्रिंग से लोड करना आसान है।

उदाहरण के लिए

, इन DER- एन्कोड निजी कुंजी के साथ:

require 'openssl' 
require 'base64' 

def box(tag, lines) 
    lines.unshift "-----BEGIN #{tag}-----" 
    lines.push "-----END #{tag}-----" 
    lines.join("\n") 
end 

def der_to_pem(tag, der) 
    box tag, Base64.strict_encode64(der).scan(/.{1,64}/) 
end 

pem = der_to_pem('PRIVATE KEY', File.read('pkcs8.key')) 
key = OpenSSL::PKey::RSA.new(pem) 

pem2 = der_to_pem('ENCRYPTED PRIVATE KEY', File.read('pkcs8_des3.key')) 
key2 = OpenSSL::PKey::RSA.new(pem2, 'secret') 

Base64 उन्हें पढ़ें डीईआर बाइट्स, और शीर्ष पर पीईएम टैग डाल:

$ openssl genrsa | openssl pkcs8 -topk8 -outform DER \ 
    -nocrypt -out pkcs8.key 
$ openssl genrsa | openssl pkcs8 -topk8 -outform DER \ 
    -v2 des3 -passout pass:secret -out pkcs8_des3.key 

आप कुछ इस तरह कर सकते हैं और नीचे, और फिर कुंजी लोड करें।

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