[1.0.0] New extractCertificateId method, New verification

This commit is contained in:
2026-03-26 17:26:55 +01:00
parent cbaf755286
commit 2b0a6ece58
11 changed files with 37 additions and 27 deletions

BIN
cryptea-1.0.0.jar Normal file

Binary file not shown.

Binary file not shown.

View File

@@ -5,7 +5,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>tools.cryptea</groupId> <groupId>tools.cryptea</groupId>
<artifactId>cryptea-tools</artifactId> <artifactId>cryptea</artifactId>
<version>1.0.0</version> <version>1.0.0</version>
<packaging>jar</packaging> <packaging>jar</packaging>

View File

@@ -53,11 +53,11 @@ public class Certificate {
/** /**
* Verifica la validità di un certificato offline * Verifica la validità di un certificato offline
* *
* @param content Il certificato in formato CRYPTEA * @param certificate Il certificato in formato CRYPTEA
* @return Un array, r[0] indica true/false, r[1] l'eventuale motivo di errore * @return Un array, r[0] indica true/false, r[1] l'eventuale motivo di errore
* @throws Exception Nella gestione dei metadata e delle date * @throws Exception Nella gestione dei metadata e delle date
*/ */
public static String[] verify(String content) throws Exception { public static String[] verify(String certificate) throws Exception {
String[] ret = new String[2]; String[] ret = new String[2];
String publicKey = "-----BEGIN CRYPTEA PUBLIC KEY-----\r\n" + // String publicKey = "-----BEGIN CRYPTEA PUBLIC KEY-----\r\n" + //
"AQAB.AMAh44IisBLbYPRAfer5SUp91wCl+9WuLsnRQ56HcXG//OKaMNSfv3mzCBu\r\n" + // "AQAB.AMAh44IisBLbYPRAfer5SUp91wCl+9WuLsnRQ56HcXG//OKaMNSfv3mzCBu\r\n" + //
@@ -67,7 +67,7 @@ public class Certificate {
"Oe4b0G48q5OxZoMEpcohwCkIDep0BtqNt1OJqAY/Md334lKAxlJGCMR0rxp3mD7k\r\n" + // "Oe4b0G48q5OxZoMEpcohwCkIDep0BtqNt1OJqAY/Md334lKAxlJGCMR0rxp3mD7k\r\n" + //
"5h5+fC8pFFjGanHyFsDj+tQDMrBs=\r\n" + // "5h5+fC8pFFjGanHyFsDj+tQDMrBs=\r\n" + //
"-----END CRYPTEA PUBLIC KEY-----"; "-----END CRYPTEA PUBLIC KEY-----";
String cleaned = content String cleaned = certificate
.replace("-----BEGIN CRYPTEA CERTIFICATE-----", "") .replace("-----BEGIN CRYPTEA CERTIFICATE-----", "")
.replace("-----END CRYPTEA CERTIFICATE-----", "") .replace("-----END CRYPTEA CERTIFICATE-----", "")
.replaceAll("\\s", ""); .replaceAll("\\s", "");
@@ -176,12 +176,12 @@ public class Certificate {
/** /**
* Estrae i metadata (se validi) da un certificato * Estrae i metadata (se validi) da un certificato
* *
* @param content Il certificato in formato CRYPTEA * @param certificate Il certificato in formato CRYPTEA
* @return I metadati in formato String[] * @return I metadati in formato String[]
* @throws Exception Se si verificano problemi nel formato * @throws Exception Se si verificano problemi nel formato
*/ */
public static String[] extractMetadata(String content) throws Exception { public static String[] extractMetadata(String certificate) throws Exception {
String cleaned = content String cleaned = certificate
.replace("-----BEGIN CRYPTEA CERTIFICATE-----", "") .replace("-----BEGIN CRYPTEA CERTIFICATE-----", "")
.replace("-----END CRYPTEA CERTIFICATE-----", "") .replace("-----END CRYPTEA CERTIFICATE-----", "")
.replaceAll("\\s", ""); .replaceAll("\\s", "");
@@ -195,15 +195,16 @@ public class Certificate {
throw new Exception("Formato certificato incompleto"); throw new Exception("Formato certificato incompleto");
return Base64Helper.toString(parts[0]).split("\\|"); return Base64Helper.toString(parts[0]).split("\\|");
} }
/** /**
* Estrae la firma digitale (fingerprint) del certificato * Estrae la firma digitale (fingerprint) del certificato
* @param content Il certificato in formato CRYPTEA *
* @param certificate Il certificato in formato CRYPTEA
* @return Una stringa, la firma in formato HEX * @return Una stringa, la firma in formato HEX
* @throws Exception Nella gestione del formato del certificato * @throws Exception Nella gestione del formato del certificato
*/ */
public static String extractSignature(String content) throws Exception { public static String extractSignature(String certificate) throws Exception {
String cleaned = content String cleaned = certificate
.replace("-----BEGIN CRYPTEA CERTIFICATE-----", "") .replace("-----BEGIN CRYPTEA CERTIFICATE-----", "")
.replace("-----END CRYPTEA CERTIFICATE-----", "") .replace("-----END CRYPTEA CERTIFICATE-----", "")
.replaceAll("\\s", ""); .replaceAll("\\s", "");
@@ -217,6 +218,27 @@ public class Certificate {
return HexHelper.fromBigInteger(new BigInteger(1, Base64Helper.toBytes(parts[3]))); return HexHelper.fromBigInteger(new BigInteger(1, Base64Helper.toBytes(parts[3])));
} }
/**
* Estrae l'ID del certificato registrato nella nostra CA
* @param certificate Il certificato in formato Cryptea
* @return Stringa contenente l'ID
*/
public static String extractCertificateId(String certificate) {
String cleaned = certificate
.replace("-----BEGIN CRYPTEA CERTIFICATE-----", "")
.replace("-----END CRYPTEA CERTIFICATE-----", "")
.replaceAll("\\s", "");
cleaned = cleaned.trim();
if (cleaned.contains("CRYPTEA") || cleaned.contains("CERTIFICATE")) {
throw new IllegalArgumentException("Formato certificato non corretto!");
}
String[] parts = cleaned.split("\\.");
if (parts.length < 4)
throw new IllegalArgumentException("Formato certificato incompleto");
return Base64Helper.toString(parts[0]).split("\\|")[1];
}
/** /**
* Controlla se il certificato è stato revocato, attraverso una verifica remota * Controlla se il certificato è stato revocato, attraverso una verifica remota
* OCSP (Online Certificate Status Protocol) * OCSP (Online Certificate Status Protocol)
@@ -225,27 +247,14 @@ public class Certificate {
* @return Un array, r[0] indica true/false, r[1] l'eventuale motivo di errore * @return Un array, r[0] indica true/false, r[1] l'eventuale motivo di errore
* @throws Exception Nella gestione della richiesta HTTP * @throws Exception Nella gestione della richiesta HTTP
*/ */
public static String[] certificateIsActive(String[] metadataExtracted) throws Exception { public static String[] certificateIsActive(String certId) throws Exception {
String[] ret = new String[2]; String[] ret = new String[2];
ObjectNode json = mapper.createObjectNode(); ObjectNode json = mapper.createObjectNode();
json.put("action", "verify_cert"); json.put("action", "verify_cert");
json.put("certId", certId);
ObjectNode metadata = mapper.createObjectNode(); String finalJson = JsonHelper.nodeToJson(json);
String finalJson = null;
try {
for (String meta : metadataExtracted) {
// Split del "="
String[] data = meta.split("\\=");
metadata.put(data[0], data[1]);
}
json.set("metadata", metadata);
finalJson = JsonHelper.nodeToJson(json);
} catch (Exception e) {
throw new Exception("Formato metadati errato.");
}
HttpRequest request = HttpRequest.newBuilder() HttpRequest request = HttpRequest.newBuilder()
.uri(new URI(BASE_URL + "/api/v2/verify")) .uri(new URI(BASE_URL + "/api/v2/verify"))
@@ -278,6 +287,7 @@ public class Certificate {
/** /**
* Effettua il ping al server CrypteaCA per verificare lo stato dei servizi * Effettua il ping al server CrypteaCA per verificare lo stato dei servizi
*
* @return TRUE/FALSE * @return TRUE/FALSE
* @throws HttpTimeoutException Nella gestione della richiesta * @throws HttpTimeoutException Nella gestione della richiesta
*/ */