Torna indietro   Hardware Upgrade Forum > Software > Programmazione

ASUS Expertbook PM3: il notebook robusto per le aziende
ASUS Expertbook PM3: il notebook robusto per le aziende
Pensato per le necessità del pubblico d'azienda, ASUS Expertbook PM3 abbina uno chassis particolrmente robusto ad un pannello da 16 pollici di diagonale che avantaggia la produttività personale. Sotto la scocca troviamo un processore AMD Ryzen AI 7 350, che grazie alla certificazione Copilot+ PC permette di sfruttare al meglio l'accelerazione degli ambiti di intelligenza artificiale
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Abbiamo provato per diversi giorni una new entry del mercato italiano, la Gowow Ori, una moto elettrica da off-road, omologata anche per la strada, che sfrutta una pendrive USB per cambiare radicalmente le sue prestazioni
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design
OnePlus 15 nasce per alzare l'asticella delle prestazioni e del gaming mobile. Ma non solo, visto che integra un display LTPO 1,5K a 165 Hz, OxygenOS 16 con funzioni AI integrate e un comparto foto con tre moduli da 50 MP al posteriore. La batteria da 7.300 mAh con SUPERVOOC 120 W e AIRVOOC 50 W è la ciliegina sulla torta per uno smartphone che promette di offrire un'esperienza d'uso senza alcun compromesso
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-06-2006, 17:15   #1
ermasto
Senior Member
 
L'Avatar di ermasto
 
Iscritto dal: Mar 2004
Messaggi: 581
[JAVA] Prelevare da Keystore PKCS#12 Chiave privata e file di certificato

ciao ragazzi come da titolo cerco un programma java che dato un PKCS#12 mi crea 2 nuovi file uno contenente solo la chiave privata che mi servirà dopo per firmare un messaggio e il corrispettivo certificato con la chiave pubblica in formato der.

Grazie mille
Ciao Ciao
__________________
Toshiba M40-281

Ultima modifica di ermasto : 06-06-2006 alle 19:30.
ermasto è offline   Rispondi citando il messaggio o parte di esso
Old 06-06-2006, 19:30   #2
ermasto
Senior Member
 
L'Avatar di ermasto
 
Iscritto dal: Mar 2004
Messaggi: 581
nessuno mi puo aiutare
__________________
Toshiba M40-281
ermasto è offline   Rispondi citando il messaggio o parte di esso
Old 06-06-2006, 21:09   #3
ermasto
Senior Member
 
L'Avatar di ermasto
 
Iscritto dal: Mar 2004
Messaggi: 581
KeyStore ks = KeyStore.getInstance("PKCS12");
InputStream in = new FileInputStream("x509pri.p12");
ks.load(in,null);
PrivateKey priv = (PrivateKey) ks.getKey("","");
java.security.cert.Certificate cert = ks.getCertificate("");
byte[] encodedCert = cert.getEncoded();

FileOutputStream certfos = new FileOutputStream("suecert.der");
certfos.write(encodedCert);
certfos.close();

allora ho trovato questo programmino che fa al caso mio ma ho due piccoli problemini
nel metodo ks.getkey() vuole essere passato l'alias e la password, ma il problema è che non so qual'è l'alias del mio certificato e lo stesso vale per il metodo getCertificate. c'è un modo per rimediare a ciò??

Grazie mille
__________________
Toshiba M40-281
ermasto è offline   Rispondi citando il messaggio o parte di esso
Old 06-06-2006, 21:56   #4
kingv
Senior Member
 
L'Avatar di kingv
 
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
Codice:
Enumeration aliases = ks.aliases();
while(aliases.hasMoreElements())
   System.out.println(aliases.nextElement());
kingv è offline   Rispondi citando il messaggio o parte di esso
Old 06-06-2006, 22:07   #5
ermasto
Senior Member
 
L'Avatar di ermasto
 
Iscritto dal: Mar 2004
Messaggi: 581
ho provato con il tuo codice kingv ma mi torna un errore: il codice modificato è:

Quote:
package Perform;

import java.util.*;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.*;
import java.security.cert.CertificateException;

public class key {

public static void main(String args[]){



try {

KeyStore ks = KeyStore.getInstance("PKCS12");
InputStream in = new FileInputStream("e://x509pri.p12");
ks.load(in,null);
Enumeration aliases = ks.aliases();
while(aliases.hasMoreElements())
System.out.println(aliases.nextElement());
PrivateKey priv = (PrivateKey) ks.getKey("aliases","aliaseskeypass".toCharArray());
byte[] encodedKey = priv.getEncoded();

/* save the certificate in a file named "suecert" */
FileOutputStream keyfos = new FileOutputStream("suekey.der");
keyfos.write(encodedKey);
keyfos.close();
//You can extract the public key certificate from the keystore and save its encoded bytes to a file named suecert, via the following.

java.security.cert.Certificate cert = ks.getCertificate("aliases");
byte[] encodedCert = cert.getEncoded();

/* save the certificate in a file named "suecert" */
FileOutputStream certfos = new FileOutputStream("suecert.der");
certfos.write(encodedCert);
certfos.close();



} catch (KeyStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (CertificateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnrecoverableKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
questo è l'errore:

Exception in thread "main" java.lang.NullPointerException
at Perform.key.main(key.java:28)

a proposito questo metodo:

Quote:
PrivateKey priv = (PrivateKey) ks.getKey("aliases","aliaseskeypass".toCharArray());
byte[] encodedKey = priv.getEncoded();

/* save the certificate in a file named "suecert" */
FileOutputStream keyfos = new FileOutputStream("suekey.der");
keyfos.write(encodedKey);
keyfos.close();

va bene per salvare in formato Pkcs#8 la chiave privata che poi posso usare per firmare i messaggi?

Grazie mille
__________________
Toshiba M40-281

Ultima modifica di ermasto : 06-06-2006 alle 22:09.
ermasto è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2006, 09:36   #6
kingv
Senior Member
 
L'Avatar di kingv
 
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
Codice:
package Perform;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import java.security.*;
import java.security.cert.CertificateException;

import java.util.*;


public class key
{
	public static void main(String[] args)
	{
		try
		{
			KeyStore ks = KeyStore.getInstance("PKCS12");
			InputStream in = new FileInputStream("e://x509pri.p12");
			ks.load(in, null);

			Enumeration aliases = ks.aliases();
			String alias = (String)aliases.nextElement();

			PrivateKey priv = (PrivateKey) ks.getKey(alias, "aliaseskeypass".toCharArray());
			byte[] encodedKey = priv.getEncoded();

			/* save the certificate in a file named "suecert" */
			FileOutputStream keyfos = new FileOutputStream("suekey.der");
			keyfos.write(encodedKey);
			keyfos.close();

			//You can extract the public key certificate from the keystore and save its encoded bytes to a file named suecert, via the following.
			java.security.cert.Certificate cert = ks.getCertificate(alias);
			byte[] encodedCert = cert.getEncoded();

			/* save the certificate in a file named "suecert" */
			FileOutputStream certfos = new FileOutputStream("suecert.der");
			certfos.write(encodedCert);
			certfos.close();
		}
		catch (KeyStoreException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		catch (FileNotFoundException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		catch (NoSuchAlgorithmException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		catch (CertificateException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		catch (IOException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		catch (UnrecoverableKeyException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
prova così.
di solito i p12 sono protetti da password (che può essere differente da quella della chiave). sei sicuro di quel "null" nella load?
kingv è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2006, 09:42   #7
kingv
Senior Member
 
L'Avatar di kingv
 
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
Quote:
Originariamente inviato da ermasto
va bene per salvare in formato Pkcs#8 la chiave privata che poi posso usare per firmare i messaggi?
dimenticavo.
sì dovrebbe essere ok. se non sei sicuro controlla col metodo getFormat() di PrivateKey
kingv è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2006, 10:00   #8
ermasto
Senior Member
 
L'Avatar di ermasto
 
Iscritto dal: Mar 2004
Messaggi: 581
io lo scarico dalla mia CA e se provo a installarlo nel browser mi chiede solo la password per la chiave privata

cmq ho provato il tuo codice e mi da quest errore

java.security.UnrecoverableKeyException: Get Key failed: Given final block not properly padded
at com.sun.net.ssl.internal.ssl.PKCS12KeyStore.engineGetKey(Unknown Source)
at java.security.KeyStore.getKey(Unknown Source)
at Perform.key.main(key.java:30)
Caused by: javax.crypto.BadPaddingException: Given final block not properly padded
at com.sun.crypto.provider.SunJCE_h.b(DashoA12275)
at com.sun.crypto.provider.SunJCE_h.b(DashoA12275)
at com.sun.crypto.provider.SunJCE_ab.b(DashoA12275)
at com.sun.crypto.provider.PKCS12PBECipherCore$PBEWithSHA1AndDESede.engineDoFinal(DashoA12275)
at javax.crypto.Cipher.doFinal(DashoA12275)
... 3 more

poi anche se tolgo la parte che si riferisce alla chiave privata e voglio solo estrarre il certificato mi da quest errore.

Exception in thread "main" java.lang.NullPointerException
at Perform.key.main(key.java:40)
__________________
Toshiba M40-281
ermasto è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2006, 10:09   #9
kingv
Senior Member
 
L'Avatar di kingv
 
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
puo' essere che le password siano coincidenti, per questo ti viene chiesta una volta sola.

prova a mettere qui:
ks.load(in, null);

la stessa password con cui proteggi la chiave privata al posto di null.


fammi sapere.
kingv è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2006, 10:22   #10
ermasto
Senior Member
 
L'Avatar di ermasto
 
Iscritto dal: Mar 2004
Messaggi: 581
Quote:
Originariamente inviato da kingv
puo' essere che le password siano coincidenti, per questo ti viene chiesta una volta sola.

prova a mettere qui:
ks.load(in, null);

la stessa password con cui proteggi la chiave privata al posto di null.


fammi sapere.
ma mi sorge un dubbio ma la password come la metto?? nel senso io ho una pass numerica di 10 caratteri ma nel programmino non la inserisco mai direttamente sempre usando "aliaseskeypass".toCharArray().

Poi ho provato a mettere in ks.load(in,"aliaseskeypass".toCharArray()) e mi caccia quest'altra eccezione

java.io.IOException: failed to decrypt safe contents entry: javax.crypto.BadPaddingException: Given final block not properly padded
at com.sun.net.ssl.internal.ssl.PKCS12KeyStore.engineLoad(Unknown Source)
at java.security.KeyStore.load(Unknown Source)
at Perform.key.main(key.java:24)
Caused by: javax.crypto.BadPaddingException: Given final block not properly padded
at com.sun.crypto.provider.SunJCE_h.b(DashoA12275)
at com.sun.crypto.provider.SunJCE_h.b(DashoA12275)
at com.sun.crypto.provider.SunJCE_ab.b(DashoA12275)
at com.sun.crypto.provider.PKCS12PBECipherCore$PBEWithSHA1AndRC2_40.engineDoFinal(DashoA12275)
at javax.crypto.Cipher.doFinal(DashoA12275)
... 3 more

cosa puo essere??

Grazie mille x l'aiuto
__________________
Toshiba M40-281
ermasto è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2006, 10:47   #11
kingv
Senior Member
 
L'Avatar di kingv
 
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
"aliaseskeypass" è la password.....
kingv è offline   Rispondi citando il messaggio o parte di esso
Old 08-06-2006, 16:21   #12
ermasto
Senior Member
 
L'Avatar di ermasto
 
Iscritto dal: Mar 2004
Messaggi: 581
niente da fare mi sa sempre lo stesso errore:

java.security.UnrecoverableKeyException: Get Key failed: Given final block not properly padded
at com.sun.net.ssl.internal.ssl.PKCS12KeyStore.engineGetKey(Unknown Source)
at java.security.KeyStore.getKey(Unknown Source)
at Perform.key.main(key.java:32)
Caused by: javax.crypto.BadPaddingException: Given final block not properly padded
at com.sun.crypto.provider.SunJCE_h.b(DashoA12275)
at com.sun.crypto.provider.SunJCE_h.b(DashoA12275)
at com.sun.crypto.provider.SunJCE_ab.b(DashoA12275)
at com.sun.crypto.provider.PKCS12PBECipherCore$PBEWithSHA1AndDESede.engineDoFinal(DashoA12275)
at javax.crypto.Cipher.doFinal(DashoA12275)1

non riesco proprio a capire da cosa è provocato
__________________
Toshiba M40-281
ermasto è offline   Rispondi citando il messaggio o parte di esso
Old 08-06-2006, 16:57   #13
ermasto
Senior Member
 
L'Avatar di ermasto
 
Iscritto dal: Mar 2004
Messaggi: 581
allora il programma ora funziona in parte ecco il codice:

[quote]


[/package Perform;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import java.security.*;
import java.security.cert.CertificateException;

import java.util.*;


public class key
{
public static void main(String[] args)
{
try
{
KeyStore ks = KeyStore.getInstance("PKCS12");
InputStream in = new FileInputStream("e://x509pri.p12");
ks.load(in, null);

Enumeration aliases = ks.aliases();
String alias=null;
while(aliases.hasMoreElements())
{
alias = (String)aliases.nextElement();
System.out.println(alias);
}
PrivateKey priv = (PrivateKey) ks.getKey(alias, "1234567890".toCharArray());
byte[] encodedKey = priv.getEncoded();
System.out.println(priv);
/* save the certificate in a file named "suecert" */
FileOutputStream keyfos = new FileOutputStream("suekey.der");
keyfos.write(encodedKey);
keyfos.close();


//You can extract the public key certificate from the keystore and save its encoded bytes to a file named suecert, via the following.
java.security.cert.Certificate cert = ks.getCertificate(alias);
byte[] encodedCert = cert.getEncoded();
System.out.println(" Certificate : " + cert);
/* save the certificate in a file named "suecert" */
FileOutputStream certfos = new FileOutputStream("suecert.der");
certfos.write(encodedCert);
certfos.close();
}
catch (KeyStoreException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (NoSuchAlgorithmException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (CertificateException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnrecoverableKeyException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}

}
}
[quote]

infatti mi stampa la chiave e me la salva pure anche se devo vedere in che estensione salvarla, perche penso che .der non va bene sai in che formato si salvano i pkcs#8??

solo che dopo avermi fatto stampare la chiave privata mi da quest'ecezione sul metodo:
byte[] encodedCert = cert.getEncoded();

eccola qua:
Exception in thread "main" java.lang.NullPointerException
at Perform.key.main(key.java:43)

e non capisco come mai
__________________
Toshiba M40-281
ermasto è offline   Rispondi citando il messaggio o parte di esso
Old 08-06-2006, 18:46   #14
kingv
Senior Member
 
L'Avatar di kingv
 
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
io ti rispondo ma non mi leggi...


sostituisci:
ks.load(in, null);
con:
ks.load(in, "1234567890");
kingv è offline   Rispondi citando il messaggio o parte di esso
Old 08-06-2006, 19:01   #15
ermasto
Senior Member
 
L'Avatar di ermasto
 
Iscritto dal: Mar 2004
Messaggi: 581
Quote:
Originariamente inviato da kingv
io ti rispondo ma non mi leggi...


sostituisci:
ks.load(in, null);
con:
ks.load(in, "1234567890");
hai ragione solo che quando avevo provato mi dava lo stesso gli errori e non ci avevo piu fatto caso

Scusami tanto e grazie mille per il tuo prezioso aiuto
__________________
Toshiba M40-281
ermasto è offline   Rispondi citando il messaggio o parte di esso
Old 08-06-2006, 20:27   #16
kingv
Senior Member
 
L'Avatar di kingv
 
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
Quote:
Originariamente inviato da ermasto
hai ragione solo che quando avevo provato mi dava lo stesso gli errori e non ci avevo piu fatto caso

no problem stavo scherzando ovviamente

CIao
kingv è offline   Rispondi citando il messaggio o parte di esso
Old 10-06-2006, 00:52   #17
Mazza2
Senior Member
 
Iscritto dal: Jan 2002
Città: Spagna
Messaggi: 556
è proprio il topic che cercavo:

ho creato una coppia di chiavi (pubblica,privata), le vorrei salvare in maniera sicura sul pc. Qual è la combinazione migliore( + sicura ) per il salvataggio??...Le chiavi le creo cosi':
Codice:
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA", "BC"); // 
      keyGen.initialize(512);
      KeyPair chiaviRSA = keyGen.generateKeyPair();
      PrivateKey chiavePrivata = chiaviRSA.getPrivate();
      PublicKey chiavePublica = chiaviRSA.getPublic();
Mazza2 è offline   Rispondi citando il messaggio o parte di esso
Old 10-06-2006, 10:54   #18
ermasto
Senior Member
 
L'Avatar di ermasto
 
Iscritto dal: Mar 2004
Messaggi: 581
ora un altro passo che devo fare è il seguente:

devo creare un messaggio soap e aggiungere ad esso un security token che è il certificato x509 e poi tutto questo messaggio soap lo devo firmare con la chiave privata che appartiene al certificato

Per quanto riguarda la creazione del messaggio soap non ci sono problemi ma non sono riuscito a trovare nulla su come aggiungere il token x509, ho letto in giro che devo usare wss4j ma non ho trovato una buona guida e cercare in tutte le API è uno sbattimento assurdo, che tu sappia esiste una guida o qualche sito che lo spiega meglio magari con qualche esempio??
__________________
Toshiba M40-281
ermasto è offline   Rispondi citando il messaggio o parte di esso
Old 10-06-2006, 13:20   #19
Mazza2
Senior Member
 
Iscritto dal: Jan 2002
Città: Spagna
Messaggi: 556
che differenza c'e' tra pcks 8 e 12??? se salvo la privata con pkcs 8,.,.non capisco come la salva con pcks 8,.., un aiuto pls
Mazza2 è offline   Rispondi citando il messaggio o parte di esso
Old 10-06-2006, 20:38   #20
kingv
Senior Member
 
L'Avatar di kingv
 
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
ermasto> non ho mai usato wss4j anche se l'argomento mi interessa parecchio. non posso aiutarti ma se trovi dei link interessanti postali

mazza> pkcs8 è un formato per le chiavi private (neanche molto usato per quello che ho visto), pkcs12 invece è lo standard per contenere chiavi e certificati in un file (protetto da crittografia a chiave simmetrica).
kingv è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


ASUS Expertbook PM3: il notebook robusto per le aziende ASUS Expertbook PM3: il notebook robusto per le ...
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design   Recensione OnePlus 15: potenza da vendere e batt...
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media AMD Ryzen 5 7500X3D: la nuova CPU da gaming con ...
SONY BRAVIA 8 II e BRAVIA Theatre System 6: il cinema a casa in formato compatto SONY BRAVIA 8 II e BRAVIA Theatre System 6: il c...
Bonus Elettrodomestici 2025, si parte: c...
Jeff Bezos torna al comando, stavolta di...
Anthesi sceglie OVHcloud per digitalizza...
Cube presenta Trike Flatbed Hybrid 750, ...
Call of Duty Black Ops 7 peggio di Infin...
L'Italia è il secondo mercato per...
Wi-Fi superveloce anche in giardino? FRI...
La Ford Focus va ufficialmente in pensio...
Booking.com integra Revolut Pay: nasce i...
DGX Spark a 175 fps con ray tracing su C...
Red Dead Redemption 2 Enhanced è ...
3Dfx Voodoo 2, una GPU nata con la scade...
Apple Watch: la Mela dovrà versar...
TIM e Nokia insieme per potenziare il 5G...
Musk lancia la nuova era dei DM su X con...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 04:46.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v