|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2004
Messaggi: 581
|
[Java] Controllare Certificato .Pem
Ragazzi ho bisogno di un aiuto, ho dei certificati in formato pem rilasciati dalla mia CA ora devo fare un programmino java che riconosce la correttezza dei certificati se sono validi e se la firma è corretta ora c'è qualche programma java che prendendo un certificato .pem e ne veda la correttezza e l'integrità??
Grazie Mille
__________________
Toshiba M40-281 |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
devi scriverlo tu o vuoi qualcosa di già fatto?
con openssl puoi verificare i certificati con facilità. |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Mar 2004
Messaggi: 581
|
Quote:
Grazie Mille
__________________
Toshiba M40-281 |
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
Quote:
se vuoi puoi farlo da java con qualche riga di codice, se vuoi un programma già fatto: openssl verify -CAfile certificatoca.pem certificatodaverificare.pem |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Mar 2004
Messaggi: 581
|
scusami non avevo capito bene, se possibile vorrei averlo in codice java che non sono riuscito a trovarlo su internet
Ti ringrazio
__________________
Toshiba M40-281 |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
ho dato un'occhiata alla documentazione, per leggerlo da un PEM di basta:
InputStream is = new FileInputStream("cert.pem"); X509Certificate cert = X509Certificate.getInstance(inStream); is.close(); e per verificarlo: X509Certificate cert, caCert; try { cert.verify( caCert.getPublicKey()); return true; } catch (GeneralSecurityException e) { return false; } |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Mar 2004
Messaggi: 581
|
Grazie mille quindi questa prima parte
InputStream is = new FileInputStream("cert.pem"); X509Certificate cert = X509Certificate.getInstance(inStream); is.close(); serve per leggere il certificato da locale quindi "cert.pem" ci devo passare il path del mio certificato?? e lo stesso se ci passo un .der??? Ho provato a fare girare questa parte superiore di codice almeno per leggeere il certificato ma il compilatore mi da un errore in inSream mi dice che non puo risolverlo. X509Certificate cert, caCert; try { cert.verify( caCert.getPublicKey()); return true; } catch (GeneralSecurityException e) { return false; } questo serve per verificarlo ma come output che ci posso mettere?? questo metodo ritorna treu o false ma non lo devo racchiudere in un metodo boolean?? e l'ultima cosa che classi devo importare per far funzionare questo codice?? Grazie mille e scusami per le mille domande
__________________
Toshiba M40-281 Ultima modifica di ermasto : 17-05-2006 alle 11:18. |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Mar 2004
Messaggi: 581
|
allora sono riuscito a far girare il codice con delle aggiunte eccolo qua:
Codice:
public static void main(String[] args) {
try
{
//------ Get the certificates issuer DN ------------------
InputStream inStream = new FileInputStream("e:\\Prova.der");
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate)cf.generateCertificate(inStream);
inStream.close();
String subjectdn = cert.getSubjectDN().getName();
String issuerdn = cert.getIssuerDN().getName() ;
System.out.println();
System.out.println("\nNome del Soggetto:\r\n" + subjectdn) ;
System.out.println("\nNome del Emittente:\r\n" + issuerdn) ;
//----- If this is a self-signed certificate, can verify signature immediately ---
X509Certificate caCert = null;
try
{
System.out.println();
System.out.println("This is a self-signed certificate. Verifying signature ...") ;
cert.verify(caCert.getPublicKey()) ;
System.out.println("Signature verified") ;
}
catch(Exception exc)
{
System.out.println("Failed to verify self-signed certificate");
}
return;
}
Qlc mi puo aiutare
__________________
Toshiba M40-281 |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
in caCert al posto di metterlo null carica il certificato della ca così come fai con il tuo e hai risolto.
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Mar 2004
Messaggi: 581
|
Ho capito ma in linea di massima io posseggo solo il certificato che mi ha dato la CA io con le informazioni che ho in questo certificato non posso verificare la firma??
Attraverso i vari campi che ci sono tipo: X509v3 Authority Key Identifier o Signature Algorithm o quant'altro In effetti il codice postato prima era leggermte sbagliato: Codice:
class CheckCert {
public static void main(String[] args) {
try
{
//------ Preleva Il Certificato ottiene qualche info e controlla se è nel periodo valido the------------------
InputStream inStream = new FileInputStream("e:\\Prova.der");
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate)cf.generateCertificate(inStream);
inStream.close();
String subjectdn = cert.getSubjectDN().getName();
String issuerdn = cert.getIssuerDN().getName() ;
System.out.println();
System.out.println("\nNome del Soggetto:\r\n" + subjectdn) ;
System.out.println("\nNome del Emittente:\r\n" + issuerdn) ;
cert.checkValidity();
System.out.println("Il Certificato è Valido");
//----- If this is a self-signed certificate, can verify signature immediately ---
try
{
System.out.println();
System.out.println("This is a self-signed certificate. Verifying signature ...") ;
cert.verify(cert.getPublicKey()) ;
System.out.println("Signature verified") ;
}
catch(Exception exc)
{
System.out.println("Failed to verify self-signed certificate");
}
return;
}
catch (Exception e)
{
System.err.println("Caught exception " + e.toString());
System.err.println("Il certificato non è Valido!");
}
}
}
__________________
Toshiba M40-281 |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
modifica così il tuo codice (al posto di e:\\ca.der metti il path giusto):
Codice:
class CheckCert {
public static void main(String[] args) {
try
{
//------ Preleva Il Certificato ottiene qualche info e controlla se è nel periodo valido the------------------
InputStream inStream = new FileInputStream("e:\\Prova.der");
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate)cf.generateCertificate(inStream);
inStream.close();
inStream = new FileInputStream("e:\\ca.der");
X509Certificate caCert = (X509Certificate)cf.generateCertificate(inStream);
inStream.close();
String subjectdn = cert.getSubjectDN().getName();
String issuerdn = cert.getIssuerDN().getName() ;
System.out.println();
System.out.println("\nNome del Soggetto:\r\n" + subjectdn) ;
System.out.println("\nNome del Emittente:\r\n" + issuerdn) ;
cert.checkValidity();
System.out.println("Il Certificato è Valido");
try
{
System.out.println();
System.out.println("Verifying signature ...") ;
cert.verify(caCert.getPublicKey()) ;
System.out.println("Signature verified") ;
}
catch(Exception exc)
{
System.out.println("Failed to verify certificate");
}
return;
}
catch (Exception e)
{
System.err.println("Caught exception " + e.toString());
System.err.println("Il certificato non è Valido!");
}
}
}
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Mar 2004
Messaggi: 581
|
Ok grazie quindi per verificare la firma devo per forza avere il certificato della mia CA non si puo fare altrimenti??cioe senza certificato della CA??
quindi il metodo verify in definitiva cosa fa?? vediamo se ho capito bene: si prende la chiave pubblica della mia ca e estrapola la sua chiave privata e controlla se il mio certificato è stato firmato con quella chiave giusto?? Mi stai salvando la vita ![]() Grazie
__________________
Toshiba M40-281 |
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
con la chiave pubblica della ca fai una verifica firma, ovvero ti accerti che chi ha emesso il certificato sia chi possiede la chiave associata al certificato della ca (cioè la CA stessa).
Ciao |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:25.



















