2012-07-17 6 views
5

में एक्सएमएल डिजिटल हस्ताक्षर Crypt::OpenSSL::RSA मॉड्यूल का उपयोग कर मैं पर्ल में एक्सएमएल पर डिजिटल हस्ताक्षर करने की कोशिश कर रहा हूं। मैं एक फाइल से एक निजी कुंजी लोड कर रहा हूँ। जावा का उपयोग कर एक कीस्टोर से निजी कुंजी उत्पन्न की गई थी।पर्ल

my $private = 'my_priv.key'; 
my $private_key = read_file($private); 
print "my private key text is\n", $private_key; 

आउटपुट, पूरे कुंजी यहाँ डाल नहीं, बस कुछ पहले लाइनों :-)

> -----BEGIN PRIVATE KEY----- MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKAuqJ1ZkxHZStfSt0CdEsaSYuLO 
> 6zDiTpt60asVLWpLe2bf... 


my $rsa_priv = Crypt::OpenSSL::RSA->new_private_key($private_key); 
print "my private key is\n",$rsa_priv->get_private_key_string(); 

आउटपुट:

नीचे मेरी पर्ल कोड है :

> -----BEGIN RSA PRIVATE KEY----- 
> MIICXAIBAAKBgQCgLqidWZMR2UrX0rdAnRLGkmLizusw4k6betGrFS1qS3tm3+97 
> wMvFXCx0Od8eb 

$private_key और $rsa_priv->get_private_key_string() के परिणाम अलग हैं। क्या ऐसा व्यवहार करना चाहिए?

क्या कोई भी Crypt::OpenSSL::RSA का उपयोग कर XML पर हस्ताक्षर करने में सक्षम है?

संपादित करें:

मैं निजी कुंजी को निकालने के लिए जावा कोड का उपयोग कर रहा हूँ, कोड नीचे के रूप में है `KeyStore ks = KeyStore.getInstance (" JKS ");

keypass = sPass.toCharArray(); 

FileInputStream fis = new FileInputStream(store); 
ks.load(fis, sPass.toCharArray()); 
fis.close(); 

String eol = System.getProperty("line.separator"); 

Key k = ks.getKey(alias, keypass); 

System.out.println("....Generating the Private Key....."); 
String encKey = new BASE64Encoder().encode(k.getEncoded()); 
System.out.println("Encoded Key: " + encKey); 
BufferedWriter myKey = null; 
myKey = new BufferedWriter(new FileWriter(alias + "_priv.key")); 
myKey.write("-----BEGIN PRIVATE KEY-----" + eol); 
myKey.write(encKey + eol); 
myKey.write("-----END PRIVATE KEY-----"); 
myKey.close(); 
System.out.println("....Private Key Generated.....");` 

दोनों जावा और पर्ल का उपयोग कर, क्योंकि xmls मैं हस्ताक्षर करने के लिए कोशिश कर रहा हूँ पर्ल में हैं (यह एक पूरी बड़ा प्रणाली है) और कीस्टोर जावा में है।

पहली बार डिजिटल कुछ भी हस्ताक्षर करने और मेरे डिजिटल रूप से हस्ताक्षरित एक्सएमएल प्राप्तकर्ता प्रणाली

+0

शायद यह अगर आप 'keytool' जावा निजी कुंजी उत्पन्न करने के लिए इस्तेमाल किया आदेश जोड़ने में मदद कर सकते हैं। –

+0

ने निजी कुंजी – qateey

उत्तर

1

$private_key; और $rsa_priv->get_private_key_string(); के परिणाम अलग हैं करने के लिए बिल्कुल के सत्यापन नहीं है, यह उस तरह व्यवहार करने के लिए माना जाता है?

हां, इनपुट एक एक्स 50 9 कुंजी है, आउटपुट एक आरएसए कुंजी है। openssl rsa -in my_priv.key एक ही परिणाम देता है।

यदि आपको इस सामान के बारे में कोई जानकारी नहीं है, तो आप उच्च स्तरीय पुस्तकालय के साथ बेहतर हैं।

+0

उत्पन्न करने के लिए उपयोग किए गए कोड को जोड़ा है, मैंने एक्सएमएल-सिग के साथ काम करने का प्रयास किया था, लेकिन यह मेरे आवेदन के साथ काम नहीं करता था, जिसके परिणामस्वरूप एक्सएमएल प्रमाणीकृत नहीं किया जा रहा था, सोचा था कि मैं पूरी प्रक्रिया को बेहतर ढंग से समझने के लिए इस दृष्टिकोण का उपयोग करूंगा , मैं डिजिटल हस्ताक्षर पर थोड़ा सा नया हूं और openssl – qateey

+1

@qateey और @daxim, 'एक्सएमएल :: सिग' * एक अच्छी सिफारिश नहीं है: http://matrix.cpantesters.org/?dist=XML-Sig+ 0.22, 'नेट :: SAML2', दूसरी ओर: http://matrix.cpantesters.org/?dist=Net-SAML2+0.17 – Axeman

+0

एक्समन, आपको संक्षेप में स्वचालित स्वचालित परीक्षण रिपोर्ट को पढ़ना सीखना है। आपको एक लाल-लाल परिणाम के बारे में संदेह होना चाहिए! एक्सएमएल-सिग के मामले में, केवल एक निर्भरता गायब है। यह डीएसए और पीकेसीएस # 8 कुंजी के साथ एक वास्तविक समस्या है, लेकिन जब तक qateey आरएसए कुंजी रखता है, मॉड्यूल पूरी तरह से servicable है। – daxim