Skip to content

Esta aplicación se encargará de firma la petición y verificar que la respuesta por parte del API consumido.

Notifications You must be signed in to change notification settings

APIHub-CdC/signature-manager-java

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

signature-manager-java GitHub Packages

Librería que permite firmar (por parte del consumidor) del request y verificar el firmado (por parte de Círculo de Crédito) del response, de consumo de APIs del sitio API HUB.

Requisitos

  1. Java >= 1.7
  2. Maven >= 3.3

Instalación

Para la instalación de las dependencias se deberá ejecutar el siguiente comando:

mvn install -Dmaven.test.skip=true

Guía de inicio

Paso 1. Generar llave y certificado

Antes de lanzar la prueba se deberá tener un keystore para la llave privada y el certificado asociado a ésta. Para generar el keystore se ejecutan las instrucciones que se encuentran en src/main/security/createKeystore.sh o con los siguientes comandos:

Opcional: Si desea cifrar su contenedor, coloque una contraseña en una variable de ambiente.

export KEY_PASSWORD=your_super_secure_password

Opcional: Si desea cifrar su keystore, coloque una contraseña en una variable de ambiente.

export KEYSTORE_PASSWORD=your_super_secure_keystore_password
  • Definición de los nombres de archivos y alias.
export PRIVATE_KEY_FILE=pri_key.pem
export CERTIFICATE_FILE=certificate.pem
export SUBJECT=/C=MX/ST=MX/L=MX/O=CDC/CN=CDC
export PKCS12_FILE=keypair.p12
export KEYSTORE_FILE=keystore.jks
export ALIAS=cdc
  • Generar llave y certificado.
# Genera la llave privada.
openssl ecparam -name secp384r1 -genkey -out ${PRIVATE_KEY_FILE}

# Genera el certificado público
openssl req -new -x509 -days 365 \
  -key ${PRIVATE_KEY_FILE} \
  -out ${CERTIFICATE_FILE} \
  -subj "${SUBJECT}"
  • Generar contenedor PKCS12 a partir de la llave privada y el certificado
# Genera el archivo pkcs12 a partir de la llave privada y el certificado.
# Deberá empaquetar su llave privada y el certificado.

openssl pkcs12 -name ${ALIAS} \
  -export -out ${PKCS12_FILE} \
  -inkey ${PRIVATE_KEY_FILE} \
  -in ${CERTIFICATE_FILE} \
  -password pass:${KEY_PASSWORD}
  • Generar un keystore dummy y eliminar su contenido.
#Genera un Keystore con un par de llaves dummy.
keytool -genkey -alias dummy -keyalg RSA \
    -keysize 2048 -keystore ${KEYSTORE_FILE} \
    -dname "CN=dummy, OU=, O=, L=, S=, C=" \
    -storepass ${KEYSTORE_PASSWORD} -keypass ${KEY_PASSWORD}
#Elimina el par de llaves dummy.
keytool -delete -alias dummy \
    -keystore ${KEYSTORE_FILE} \
    -storepass ${KEYSTORE_PASSWORD}
  • Importar el contenedor PKCS12 al keystore
#Importamos el contenedor PKCS12
keytool -importkeystore -srckeystore ${PKCS12_FILE} \
  -srcstoretype PKCS12 \
  -srcstorepass ${KEY_PASSWORD} \
  -destkeystore ${KEYSTORE_FILE} \
  -deststoretype JKS -storepass ${KEYSTORE_PASSWORD} \
  -alias ${ALIAS}
#Lista el contenido del Kesystore para verificar que
keytool -list -keystore ${KEYSTORE_FILE} \
  -storepass ${KEYSTORE_PASSWORD}

Paso 2. Modificar archivo de configuraciones

NOTA: De igual manera las rutas se pueden mandar directamente en el constructor SignerInterceptor (véase Paso 3).

Para hacer uso del certificado que se descargó y el keystore que se creó se deberán modificar las rutas que se encuentran en src/main/resources/config.properties

keystore_file=your_path_for_your_keystore/keystore.jks
cdc_cert_file=your_path_for_certificate_of_cdc/cdc_cert.pem
keystore_password=your_super_secure_keystore_password
key_alias=cdc
key_password=your_super_secure_password

Paso 3. Modificar URL y datos de petición

En el archivo ApiTest.java, que se encuentra en src/test/java/com/cdc/apihub/signer/manager/test. Se deberán modificar las rutas de las configuraciones para el firmado (en caso de haber omitido el paso 2), los datos de la petición y de la URL para el consumo de la API en setBasePath("the_url"), como se muestra en el siguiente fragmento de código con los datos correspondientes:

NOTA: Los datos de la siguiente petición son solo representativos.

public class ApiTest {
	
	private String keystoreFile = "your_path_for_your_keystore/keystore.jks";
	private String cdcCertFile = "your_path_for_certificate_of_cdc/cdc_cert.pem";
	private String keystorePassword = "your_super_secure_keystore_password";
	private String keyAlias = "your_key_alias";
	private String keyPassword = "your_super_secure_password";
	
	private String url = "the_url";
	private String xApiKey = "X_Api_Key";

	private Logger logger = LoggerFactory.getLogger(ApiTest.class.getName());
	private final SecurityApi api = new SecurityApi();
	private ApiClient apiClient = null;

	@Before()
	public void setUp() {
		this.apiClient = api.getApiClient();
		this.apiClient.setBasePath(url);
		OkHttpClient okHttpClient = new OkHttpClient().newBuilder().readTimeout(30, TimeUnit.SECONDS)
				.addInterceptor(new SignerInterceptor(keystoreFile, cdcCertFile, keystorePassword, keyAlias, keyPassword)).build();
		apiClient.setHttpClient(okHttpClient);
	}

	@Test
	public void signerManagerTest() throws ApiException {
		String body = "Esto es un mensaje de prueba";
		
		Integer estatusOK = 200;
		Integer estatusNoContent = 204;
		
		try {

			ApiResponse<?> response = api.securityGenericTest(xApiKey, body);
			Assert.assertTrue(estatusOK.equals(response.getStatusCode()));

			if (estatusOK.equals(response.getStatusCode())) {
				String responseOK = (String) response.getData();
				logger.info(responseOK.toString());
			}

		} catch (ApiException e) {
			if (!estatusNoContent.equals(e.getCode())) {
				logger.info(e.getResponseBody());
			}
			Assert.assertTrue(estatusOK.equals(e.getCode()));
		}
	}
}

Paso 4. Ejecutar la prueba unitaria

Teniendo los pasos anteriores ya solo falta ejecutar la prueba unitaria, con el siguiente comando:

mvn test -Dmaven.install.skip=true

About

Esta aplicación se encargará de firma la petición y verificar que la respuesta por parte del API consumido.

Resources

Stars

Watchers

Forks

Packages