openssl_csr_sign

(PHP 4 >= 4.2.0, PHP 5, PHP 7)

openssl_csr_signFirmar una CSR con otro certificado (o autofirmar) y generar un certificado

Descripción

openssl_csr_sign ( mixed $csr , mixed $cacert , mixed $priv_key , int $days [, array $configargs [, int $serial = 0 ]] ) : resource

openssl_csr_sign() genera un recurso de certificado x509 desde la CSR dada.

Nota: Necesita tener instalado un openssl.cnf válido para que esta función opere correctamente. Vea las notas sobre la sección de instalación para más información.

Parámetros

csr

Una CSR previamente generada por openssl_csr_new(). También puede ser la ruta de una CSR codificada con PEM cuando se especifica con file://ruta/a/csr o una cadena exportada generada por openssl_csr_export().

cacert

El certificado generado será firmado por cacert. Si cacert es NULL, el certificado generado será un certificado autofirmado.

priv_key

priv_key es la clave privada que se corresponde con cacert.

days

days especifica la duración durante la cuál el certificado generado será válido, en días.

configargs

Se puede ajustar la firma de la CSR mediante configargs. Véase openssl_csr_new() para más información acerca de configargs.

serial

El número de serie opcional del certificado emitido. Si no se especifica será 0 por defecto.

Valores devueltos

Devuelve un recurso de certificado x509 si se tuvo éxito, FALSE si falló.

Ejemplos

Ejemplo #1 Ejemplo de openssl_csr_sign() - firmar una CSR (cómo implementar su propia AC)

<?php
// Asumimos que este script está establecido para recivir una CSR que ha
// sido pegada al área de texto desde otra página
$csrdata $_POST["CSR"];

// Firmaremos la petición usando nuestro propio certificado de "autoridad
// certificadora". También puede usar cualquier certificado para firmar otro, pero
// el proceso no vale de nada a menos que el certificado de firma sea acreditado
// por el software/usuarios que tratarán con el certificado recién firmado

// Necesitamos nuestro certificado de AC y su clave privada
$cacert "file://ruta/a/ca.crt";
$privkey = array("file://ruta/a/ca.key""su_frase_de_contraseña");

$usercert openssl_csr_sign($csrdata$cacert$privkey365, array('digest_alg'=>'sha256') );

// Ahora mostramos el certificado generado por lo que el ususario puede
// copiarlo y pegarlo a su configuración local (tal como un archivo
// para guardar el certificado para su servidor SSL)
openssl_x509_export($usercert$certout);
echo 
$certout;

// Mostrar cualquier error que ocurra
while (($e openssl_error_string()) !== false) {
    echo 
$e "\n";
}
?>