\XgapDefaultOpenSslPublicKeyInfrastructure

Clase base para manejar Infraestructura de Clave Pública (PKI) usando OpenSSL y claves guardadas en formato PEM. Implementación por defecto que guarda la información en una estructura predefinida de la base de datos, por lo cual requiere una conexión.

Requiere:

  • La extensión de PHP OpenSSL.
  • La estructura de base de datos definida en {motor}/bd/04-firma_digital.sql
  • El usuario asociado (\getUser() debe corresponder a la columna id_usuario de la tabla seguridad.certificadoxusuario

Summary

Methods
Properties
Constants
isAvailable()
availabilityStatus()
getCertificateInfo()
getSignatureAlgorithm()
sign()
verify()
instance()
__construct()
getUser()
getPrivateKey()
getPublicKey()
getCertificate()
loadPrivateKey()
loadPrivateKeyFile()
loadPublicKey()
loadPublicKeyFile()
loadCertificate()
loadCertificateFile()
unloadPrivateKey()
unloadPublicKey()
unloadCertificate()
unloadAll()
isPrivateKeyAvailable()
isPublicKeyAvailable()
isCertificateAvailable()
getCertificateId()
loadCertificateFromStorage()
setUpdateTime()
setUpdateUser()
storeCertificate()
setCertificateRevocationReason()
getCertificateRevocationStatus()
No public properties found
CERT_STATUS_OK
CERT_STATUS_ERR_CERT_NOT_YET_VALID
CERT_STATUS_ERR_CERT_HAS_EXPIRED
CERT_STATUS_ERR_CERT_REVOKED
DEFAULT_PKI_CLASS
performPrivateKeyFormatCheck()
performPublicKeyFormatCheck()
performCertificateFormatCheck()
performKeysMatchCheck()
getPublicKeyFromCertificate()
getSignatureAlgorithmConstant()
getPassphrase()
_getPrivateKey()
_getPublicKey()
_getCertificate()
loadFileContents()
checkKeysMatch()
getPrivateKeyFromFile()
getPublicKeyFromFile()
getCertificateFromFile()
checkPublicKeyOwnerMatch()
checkCertificateOwnerMatch()
isPrivateKeyLoaded()
isPublicKeyLoaded()
isCertificateLoaded()
getCertificateDataByUserId()
getCertificateDataByCertificateId()
loadCertificateDbData()
$parsed_certificate
N/A
No private methods found
No private properties found
N/A

Constants

CERT_STATUS_OK

CERT_STATUS_OK

CERT_STATUS_ERR_CERT_NOT_YET_VALID

CERT_STATUS_ERR_CERT_NOT_YET_VALID

CERT_STATUS_ERR_CERT_HAS_EXPIRED

CERT_STATUS_ERR_CERT_HAS_EXPIRED

CERT_STATUS_ERR_CERT_REVOKED

CERT_STATUS_ERR_CERT_REVOKED

DEFAULT_PKI_CLASS

DEFAULT_PKI_CLASS

Nombre de clase concreta a instanciar por defecto si no se especifica otra implementación.

Properties

$parsed_certificate

$parsed_certificate : array

Resultado de la invocación a openssl_x509_parse().

Type

array

Methods

isAvailable()

isAvailable() : boolean

Permite comprobar si esta implementación se puede usar, es decir, si se cumplen sus requisitos.

Returns

boolean

availabilityStatus()

availabilityStatus() : string

Devuelve un mensaje que indica el estado de disponibilidad.

Returns

string

getCertificateInfo()

getCertificateInfo(  $fields = array()) 

Parameters

$fields

getSignatureAlgorithm()

getSignatureAlgorithm() : string

Devuelve el nombre de la constante definida en la extensión OpenSSL que identifica el algoritmo (<var>OPENSSL_ALGO_*</var>).

La implementación actual usa siempre OPENSSL_ALGO_SHA1.

Returns

string

sign()

sign(  $data) 

Parameters

$data

verify()

verify(  $data,   $signature) 

Parameters

$data
$signature

instance()

instance(mixed  $user) : \PublicKeyInfrastructure

Retorna una instancia correspondiente al usuario <var>$user</var>.

Parameters

mixed $user

usuario al que van a corresponder las operaciones de este objeto; se puede usar cualquier tipo de datos que se pueda convertir a string

Throws

\XgapPublicKeyInfrastructureInstantiationException

si no se puede crear la instancia por algún motivo

\XgapPublicKeyInfrastructureUnavailableException

si no se puede crear la instancia porque hay algún requisito que no se cumple

Returns

\PublicKeyInfrastructure

__construct()

__construct(mixed  $user) 

Crea la instancia. Si las claves o el certificado del usuario están guardados en la sesión, los carga automáticamente.

Parameters

mixed $user

usuario al que van a corresponder las operaciones de este objeto; se puede usar cualquier tipo de datos que se pueda convertir a string

getUser()

getUser() : mixed

Returns

mixed —

usuario al que corresponden las operaciones de este objeto.

getPrivateKey()

getPrivateKey() : string

Devuelve el contenido de la clave privada.

Returns

string

getPublicKey()

getPublicKey() : string

Devuelve el contenido de la clave pública.

Returns

string

getCertificate()

getCertificate() : string

Devuelve el contenido del certificado.

Returns

string

loadPrivateKey()

loadPrivateKey(string  $content, boolean  $store_in_session = FALSE, string  $passphrase = NULL) 

Carga el contenido de la clave privada.

Si el certificado está cargado, se comprueba que se corresponda con la clave.

Parameters

string $content

contenido de la clave

boolean $store_in_session

¿la clave se debe almacenar en la sesión?

string $passphrase

la frase usada para encriptar la clave

loadPrivateKeyFile()

loadPrivateKeyFile(string  $filename, boolean  $store_in_session = FALSE, string  $passphrase = NULL) 

Carga el contenido de la clave privada a partir de un archivo.

Si el certificado está cargado, se comprueba que se corresponda con la clave.

Parameters

string $filename

nombre del archivo a cargar

boolean $store_in_session

¿la clave se debe almacenar en la sesión?

string $passphrase

la frase usada para encriptar la clave

loadPublicKey()

loadPublicKey(string  $content, boolean  $store_in_session = FALSE) 

Carga el contenido de la clave pública.

Si hubiera un certificado cargado, lo descarga. Para que estén disponibles tanto la clave pública como el certificado, se debe cargar el certificado, no la clave.

Si la clave privada está cargada, se comprueba que se corresponda con la pública.

Parameters

string $content

contenido de la clave

boolean $store_in_session

¿la clave se debe almacenar en la sesión?

loadPublicKeyFile()

loadPublicKeyFile(string  $filename, boolean  $store_in_session = FALSE) 

Carga el contenido de la clave pública a partir de un archivo.

Si hubiera un certificado cargado, lo descarga. Para que estén disponibles tanto la clave pública como el certificado, se debe cargar el certificado, no la clave.

Si la clave privada está cargada, se comprueba que se corresponda con la pública.

Parameters

string $filename

nombre del archivo a cargar

boolean $store_in_session

¿la clave se debe almacenar en la sesión?

loadCertificate()

loadCertificate(string  $content, boolean  $store_in_session = FALSE) 

Carga el contenido un certificado.

Simultáneamente carga la clave pública desde el certificado.

Si la clave privada está cargada, se comprueba que se corresponda con el certificado.

Parameters

string $content

contenido del certificado

boolean $store_in_session

¿el certificado se debe almacenar en la sesión?

loadCertificateFile()

loadCertificateFile(string  $filename, boolean  $store_in_session = FALSE) 

Carga el contenido de un certificado partir de un archivo.

Simultáneamente carga la clave pública desde el certificado.

Si la clave privada está cargada, se comprueba que se corresponda con el certificado.

Parameters

string $filename

nombre del archivo a cargar

boolean $store_in_session

¿el certificado se debe almacenar en la sesión?

unloadPrivateKey()

unloadPrivateKey() 

Descarga la clave privada de la instancia y de la sesión.

No tiene efecto si la clave no está cargada.

unloadPublicKey()

unloadPublicKey() 

Descarga la clave pública de la instancia y de la sesión.

No tiene efecto si la clave no está cargada.

unloadCertificate()

unloadCertificate(boolean  $keep_public_key = FALSE) 

Descarga el certificado pública de la instancia y de la sesión.

No tiene efecto si la clave no está cargada.

Parameters

boolean $keep_public_key

¿Se debe mantener cargada la clave pública? Si es FALSE, se descarga la clave junto con el certificado

unloadAll()

unloadAll() 

Descarga de la instancia y de la sesión el certificado y las claves pública y privada.

isPrivateKeyAvailable()

isPrivateKeyAvailable() : boolean

Permite comprobar si la clave privada ha sido cargada y es válida.

Returns

boolean

isPublicKeyAvailable()

isPublicKeyAvailable() : boolean

Permite comprobar si la clave pública ha sido cargada y es válida.

Returns

boolean

isCertificateAvailable()

isCertificateAvailable() : boolean

Permite comprobar si el certificado ha sido cargado y es válido.

Returns

boolean

getCertificateId()

getCertificateId() : string

Devuelve un string que identifica unívocamente el certificado, en el formato: <pre>"Serial Number: {Serial Number}; Issuer CN: {Issuer -> CN}"</pre>

Throws

\XgapPublicKeyInfrastructureKeyUnavailableException

si el certificado no está disponible

\XgapPublicKeyInfrastructureMissingInfoException

si no se pudo obtener parte de la información necesaria para construir el identificador

Returns

string

loadCertificateFromStorage()

loadCertificateFromStorage(boolean  $store_in_session = FALSE) : boolean

Carga el certificado actual del usuario.

Parameters

boolean $store_in_session

¿el certificado se debe almacenar en la sesión?

Returns

boolean —

TRUE si el usuario tiene asociado un certificado; FALSE si no

setUpdateTime()

setUpdateTime(integer  $time) 

Establece el momento de realización de la actualización en la base de datos.

Si no se especifica, se usa el tiempo actual.

Parameters

integer $time

setUpdateUser()

setUpdateUser(integer  $user) 

Establece el usuario que realiza el cambio en la base de datos.

Si no se especifica, se usa el usuario del sistema.

Parameters

integer $user

storeCertificate()

storeCertificate() 

Almacena el certificado cargado.

setCertificateRevocationReason()

setCertificateRevocationReason(integer  $reason) 

Establece una razón de revocación del certificado.

Cualquier valor no nulo indica que el certificado está revocado, por lo cual tras establecer este valor, \getCertificateRevocationStatus() pasa a retornar iXgapPublicKeyInfrastructure::CERT_REVOCATION_REVOKED.

Parameters

integer $reason

getCertificateRevocationStatus()

getCertificateRevocationStatus() 

performPrivateKeyFormatCheck()

performPrivateKeyFormatCheck() 

Comprueba que la clave privada cargada tenga un formato válido y dispara una excepción si no.

Sólo se invoca si la clave privada está cargada.

Throws

\XgapPublicKeyInfrastructureCheckException

si la clave no tiene un formato reconocido

performPublicKeyFormatCheck()

performPublicKeyFormatCheck() 

Comprueba que la clave pública cargada tenga un formato válido y dispara una excepción si no.

Sólo se invoca si la clave pública está cargada.

Throws

\XgapPublicKeyInfrastructureCheckException

si la clave no tiene un formato reconocido

performCertificateFormatCheck()

performCertificateFormatCheck() 

Comprueba que el certificado cargado tenga un formato válido y dispara una excepción si no.

Sólo se invoca si el el certificado está cargado.

Throws

\XgapPublicKeyInfrastructureCheckException

si el certificado no tiene un formato reconocido

performKeysMatchCheck()

performKeysMatchCheck() 

Comprueba que la privada se corresponda con el certificado o la pública.

No tiene efecto si no están cargados tanto la privada como el certificado o la pública.

Throws

\XgapPublicKeyInfrastructureKeyMismatchException

si no hay correspondencia

getPublicKeyFromCertificate()

getPublicKeyFromCertificate() : string

Carga y retorna la clave pública a partir del certificado.

Sólo se invoca con un certificado disponible.

Returns

string —

el contenido de la clave pública o NULL si no se pudo obtener la clave

getSignatureAlgorithmConstant()

getSignatureAlgorithmConstant() : integer

Devuelve el valor de la constante dada por {@link getSignatureAlgorithm()}.

Returns

integer

getPassphrase()

getPassphrase() : string

Devuelve la frase usada para encriptar la clave privada.

Returns

string

_getPrivateKey()

_getPrivateKey() : string

Retorna la clave privada, sin comprobar su disponibilidad.

No dispara excepciones.

Returns

string —

la clave (posiblemente con formato inválido) o NULL si no está cargada

_getPublicKey()

_getPublicKey() : string

Retorna la clave pública, sin comprobar su disponibilidad.

No dispara excepciones.

Returns

string —

la clave (posiblemente con formato inválido) o NULL si no está cargada

_getCertificate()

_getCertificate() : string

Retorna el certificado, sin comprobar su disponibilidad.

No dispara excepciones.

Returns

string —

el certificado (posiblemente con formato inválido) o NULL si no está cargado

loadFileContents()

loadFileContents(string  $filename) : string

Carga el contenido de un archivo y lo retorna como string.

Parameters

string $filename

el nombre del archivo

Throws

\XgapPublicKeyInfrastructureLoadException

si no se puede cargar el archivo

Returns

string

checkKeysMatch()

checkKeysMatch() 

Comprueba que la privada se corresponda con el certificado o la clave pública.

No tiene efecto si no cargados están tanto la privada como el certificado o la pública.

Throws

\XgapPublicKeyInfrastructureKeyMismatchException

si no hay correspondencia

getPrivateKeyFromFile()

getPrivateKeyFromFile(  $filename) : mixed

Carga una clave privada guardada en un archivo y retorna la representación.

La implementación provista retorna el contenido del archivo como un string.

Parameters

$filename

Throws

\XgapPublicKeyInfrastructureLoadException

si no se puede cargar el archivo

Returns

mixed —

la clave cargada

getPublicKeyFromFile()

getPublicKeyFromFile(  $filename) : mixed

Carga una clave pública guardada en un archivo y retorna la representación.

La implementación provista retorna el contenido del archivo como un string.

Parameters

$filename

Throws

\XgapPublicKeyInfrastructureLoadException

si no se puede cargar el archivo

Returns

mixed —

la clave cargada

getCertificateFromFile()

getCertificateFromFile(  $filename) : mixed

Carga un certificado guardado en un archivo y retorna la representación.

La implementación provista retorna el contenido del archivo como un string.

Parameters

$filename

Throws

\XgapPublicKeyInfrastructureLoadException

si no se puede cargar el archivo

Returns

mixed —

la clave cargada

checkPublicKeyOwnerMatch()

checkPublicKeyOwnerMatch() 

Compara el usuario asociado al objeto y a la clave pública.

Throws

\XgapPublicKeyInfrastructureOwnerMismatchException

si el sistema asocia claves públicas con usuarios y {@link getUser()} no coincide con el usuario asociado

checkCertificateOwnerMatch()

checkCertificateOwnerMatch() 

isPrivateKeyLoaded()

isPrivateKeyLoaded() : boolean

Permite comprobar si la clave privada ha sido cargada, independientemente que sea válida o no.

Returns

boolean

isPublicKeyLoaded()

isPublicKeyLoaded() : boolean

Permite comprobar si la clave pública ha sido cargada, independientemente que sea válida o no.

Returns

boolean

isCertificateLoaded()

isCertificateLoaded() : boolean

Permite comprobar si el certificado ha sido cargado, independientemente que sea válido o no.

Returns

boolean

getCertificateDataByUserId()

getCertificateDataByUserId(\Conexion  $connection) : array

Parameters

\Conexion $connection

Returns

array

getCertificateDataByCertificateId()

getCertificateDataByCertificateId(\Conexion  $connection) : array

Parameters

\Conexion $connection

Returns

array

loadCertificateDbData()

loadCertificateDbData(  $connection) 

Parameters

$connection