# VSSLCertificate

Esta clase representa un certificado lo que nos permite obtener información acerca de éste.

La función correspondiente a la clase [VSSLInfo](https://doc.velneo.com/velneo-vdevelop/scripts/lenguajes/javascript/clases/vsslinfo) nos permite acceder a los certificados de la conexión segura TLS/SSL establecida  con un componente de Velneo a un servidor de Velneo:

```
theApp.sslInfo().peerCertificateChain( nCertificado );
```

Pero también es posible crear un objeto de esta clase usando un certificado en disco. Requiere importarla previamente a su uso:&#x20;

`importClass ( "VSSLCertificate" );`

{% hint style="danger" %}
Esta clase no es funcional en [Velneo Web](https://doc.velneo.com/velneo-vclient-web).
{% endhint %}

## Indice de funciones

### Constructores

VSSLCertificate new [VSSLCertificate](#vsslcertificate-vsslcertificate)()

VSSLCertificate new [VSSLCertificate](#vsslcertificate-vsslcertificate-vbytearray-cert-number-encodignformat)(VByteArray cert, Number encodignFormat)

### **Generales**

String [digest](#digest)( Number nAlgorithm )

Date [effectiveDate](#effectivedate)()

Date [expiryDate](#expirydate)()

Boolean [isBlacklisted](#isblacklisted)()

Boolean [isNull](#isnull)()

VSSLKey [privateKey](#vsslkey-privatekey)()

VSSLKey [publicKey](#vsslkey-publickey)()

String [issuerInfo](#issuerinfo)( String szAtributo )

String [serialNumber](#serialnumber)()

Array [subjectInfo](#subjectinfo)( String szAtributo )

VByteArray [toDer](#vbytearray-toder)() → ByteArray con el contenido en formato DER

VByteArray [toPem](#vbytearray-topem)() → ByteArray con el contenido en formato PEM

String [toText](#totext)()

String [version](#version)()

### De importación

bool [importPkcs12](#bool-importpkcs12-vbytearray-datacertificate-string-password)( VByteArray dataCertificate, String password )

bool [importFromFilePkcs12](#bool-importpkcs12-string-filename-string-password)( String fileName, String password )

## Enumeraciones

### encodingFormat (formatos de codificación)

* **Pem** = 0: el certificado es del formato PEM (formato de texto plano codificado en base64).
* **Der** = 1: el certificado es de tipo DER (formato binario, no legible directamente).

## Documentación de funciones

### Constructores <a href="#fnc" id="fnc"></a>

#### [VSSLCertificate](https://doc.velneo.com/velneo-vdevelop/scripts/lenguajes/javascript/clases/vsslcertificate) VSSLCertificate()

Requiere importar previamente la clase:&#x20;

`importClass ( "VSSLCertificate" );`

#### [VSSLCertificate](https://doc.velneo.com/velneo-vdevelop/scripts/lenguajes/javascript/clases/vsslcertificate) VSSLCertificate(VByteArray cert, Number encodignFormat)

Parámetros:

* cert: que contendrá un [byteArray](https://doc.velneo.com/velneo-vdevelop/scripts/lenguajes/javascript/clases/vbytearray) con el certificado.
* encodingFormat: que indicaré el formato de codificación. Ver [enum](#encodingformat-formatos-de-codificacion) de formatos de codificación.

Requiere importar previamente la clase:&#x20;

`importClass ( "VSSLCertificate" );`

Ejemplo:

```javascript
importClass("VSSLCertificate");
importClass("VFile");

var senda = theRoot.varToString("SENDA_CERTIFICADO");
var file = new VFile(senda);
if (file.open(VFile.OpenModeReadOnly))
{
	var baCert = file.readAll();
	var cert = new VSSLCertificate( baCert, VSSLCertificate.Pem );
}
```

### Funciones generales <a href="#fnc" id="fnc"></a>

#### String digest( Number nAlgorithm ) <a href="#digest" id="digest"></a>

Devuelve un resumen o hash del certificado con el algoritmo que indiquemos como parámetro (por defecto MD5).

Parámetros:

* Algoritmo: ver enums de algoritmos en [VApp](https://doc.velneo.com/velneo-vdevelop/scripts/lenguajes/javascript/clases/vapp) (AlgoritmoHash).

#### Date effectiveDate() <a href="#effectivedate" id="effectivedate"></a>

Devuelve la fecha a partir de la que el certificado es válido.

#### Date expiryDate() <a href="#expirydate" id="expirydate"></a>

Devuelve la fecha a partir de la que el certificado deja de ser válido.

#### Boolean isBlacklisted() <a href="#isblacklisted" id="isblacklisted"></a>

Devuelve true si el certificado está en la lista negra en caso contrario devolverá false.

#### Boolean isNull() <a href="#isnull" id="isnull"></a>

Devuelve true si el certificado es nulo, es decir, un certificado sin contenido, en caso contrario, devuelve false.

#### VSSLKey privateKey()

Retorna un objeto [VSSLKey](https://doc.velneo.com/velneo-vdevelop/scripts/lenguajes/javascript/clases/vsslkey) la clave privada del certificado (Sólo disponible en caso de haber importado el certificado).

Esta función no está disponibles mi en macOS ni en iOS.

#### VSSLKey publicKey()

Retorna un objeto [VSSLKey](https://doc.velneo.com/velneo-vdevelop/scripts/lenguajes/javascript/clases/vsslkey) la clave pública del certificado.&#x20;

Esta función no está disponibles mi en macOS ni en iOS.

#### String issuerInfo( String szAtributo ) <a href="#issuerinfo" id="issuerinfo"></a>

Devuelve un dato del certificado correspondiente a la información de generación, en función del parámetro indicado.

Parámetros:

* szAtributo: cadena que indica el dato correspondiente al certificado que queremos obtener. Ver siguiente lista:

"O": nombre de la organización.

"CN": nombre común. Normalmente es el nombre del host.

"L": localidad.

"OU": nombre de la unidad organizacional.

"C": país.

"ST": estado o provincia.

"emailAdress": correo electrónico.

#### String serialNumber() <a href="#serialnumber" id="serialnumber"></a>

Número de serie del certificado en formato hexadecimal.

#### Array subjectInfo( String szAtributo ) <a href="#subjectinfo" id="subjectinfo"></a>

Devuelve un array de cadenas con la información añadida al atributo que indicamos como parámetro.

Parámetros:

* szAtributo: cadena que indica el dato correspondiente al certificado que queremos obtener. Ver siguiente lista:

"O": nombre de la organización.

"CN": nombre común. Normalmente es el nombre del host.

"L": localidad.

"OU": nombre de la unidad organizacional.

"C": país.

"ST": estado o provincia.

"emailAdress": correo electrónico.

#### VByteArray toDer()

Devuelve un objeto [VByteArray](https://doc.velneo.com/velneo-vdevelop/scripts/lenguajes/javascript/clases/vbytearray) con el contenido de la clave en formato DER.

Esta función no está disponibles mi en macOS ni en iOS.

#### VByteArray toPem()

Devuelve un objeto [VByteArray](https://doc.velneo.com/velneo-vdevelop/scripts/lenguajes/javascript/clases/vbytearray) con el contenido de la clave en formato PEM.

Esta función no está disponibles mi en macOS ni en iOS.

#### String toText() <a href="#totext" id="totext"></a>

Devuelve el certificado en una representación en texto legible.

#### String version() <a href="#version" id="version"></a>

Devuelve la versión del certificado.

### Funciones de importación

#### bool importPkcs12( VByteArray dataCertificate, String password )

Importa un certificado desde un fichero P12.&#x20;

Parámetros:

* VByteArray dataCertificate: objeto de tipo [VByteArray](https://doc.velneo.com/velneo-vdevelop/scripts/lenguajes/javascript/clases/vbytearray) con el contenido del fichero del certificado.
* String password: cadena con la contraseña del certificado.

Esta función no está disponibles mi en macOS ni en iOS.

#### bool importFromFilePkcs12( String fileName, String password )

Importa un certificado desde un fichero P12.&#x20;

Parámetros:

* String fileName: senda del fichero del certificado.
* String password: cadena con la contraseña del certificado.

Esta función no está disponibles mi en macOS ni en iOS.

## Ejemplo

### Lectura de certificados en disco y obtención de su claves pública y privada

```javascript
//Asumiendo que el certificado está en la caché local del cliente

var sendaCertificadoPFXActivo = theApp.clientCachePath() + "Certificado_activo.pfx";
var claveCertificadoActivo = "123456";

//Modos de importar
//Leems el fichero en VByteArray
var certificadoVB = new VSSLCertificate();
var contenido = new VByteArray();
var fp = new VFile( sendaCertificadoPFXActivo );		
if ( fp.open( VFile.OpenModeReadOnly ) ){
	contenido = fp.readAll();
	fp.close();
}

certificadoVB.importPkcs12( contenido , claveCertificadoActivo )

//Leyendo directamente de disco
certificadoVB.importFromFilePkcs12( sendaCertificadoPFXActivo , claveCertificadoActivo )

//Utilizando los metodos
certificadoVB.toDer(); // retorna VByteArray no legible
certificadoVB.toPem().toLatin1String(); // retorna VByteArray legible

var clavePublica = certificadoVB.publicKey();  //retorna objeto VSSLKey
var clavePrivada = certificadoVB.privateKey(); //retorna objeto VSSLKey

clavePublica.algorithm();
clavePublica.toDer(); // retorna VByteArray no legible
clavePublica.toPem().toLatin1String(); // retorna VByteArray legible
clavePublica.type() // retorna el tipo de la clave
clavePublica.algorithm() // retorna el algoritmo de la clave
clavePublica.length() // Retorna el tamaño de la clave
```
