2012-07-17 9 views
5

Sto provando a firmare digitalmente XML in Perl utilizzando il modulo Crypt::OpenSSL::RSA. Sto caricando una chiave privata da un file. La chiave privata è stata generata da un keystore utilizzando Java.Firme digitali XML in Perl

Qui di seguito è il mio codice Perl:

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

uscita, non mettere l'intera chiave qui, solo le poche prime righe :-)

> -----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(); 

uscita :

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

I risultati di $private_key e $rsa_priv->get_private_key_string() sono diversi. Si suppone che si comporti in questo modo?

Qualcuno è stato in grado di firmare XML utilizzando Crypt::OpenSSL::RSA?

edit:

sto usando il codice Java per estrarre la chiave privata, il codice è come sotto `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.....");` 

utilizzando sia Java e Perl, perché i XMLs sto cercando di firmare sono in perl (si tratta di un intero sistema grande) e l'archivio chiavi è in java.

Primo accesso digitalmente nulla e il mio XML con firma digitale non è l'autenticazione a tutti per il sistema ricevente

+0

Forse potrebbe aiutare se si aggiunge il comando 'keytool' utilizzato per generare la chiave privata Java. –

+0

appena aggiunto il codice utilizzato per generare la chiave privata – qateey

risposta

1

I risultati di $private_key; e $rsa_priv->get_private_key_string(); sono diversi, è questo dovrebbe comportarsi così?

Sì, l'input è una chiave X509, l'uscita è una chiave RSA. openssl rsa -in my_priv.key dà lo stesso risultato.

Se non hai idea di questa roba, stai meglio con una libreria di alto livello.

+0

ho provato a lavorare con XML-Sig ma non ha funzionato con la mia applicazione, l'xml risultante non è stato autenticato, ho pensato che avrei usato questo approccio per capire meglio l'intero processo , sono un po 'nuovo sulle firme digitali e openssl – qateey

+1

@qateey e @daxim, 'XML :: Sig' è * non * un buon consiglio: http://matrix.cpantesters.org/?dist=XML-Sig+ 0.22, 'Net :: SAML2 ', d'altra parte: http://matrix.cpantesters.org/?dist=Net-SAML2+0.17 – Axeman

+0

Axeman, devi imparare a leggere correttamente i rapporti dei test automatici sintetizzati. Dovresti essere sospettoso di un risultato tutto rosso! Nel caso di XML-Sig, manca solo una dipendenza. Questo maschera un vero problema con le chiavi DSA e PKCS # 8, ma finché qateey rimane sulle chiavi RSA, il modulo è perfettamente riparabile. – daxim

Problemi correlati