(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
openssl_csr_sign — Firma un CSR con otro certificado (o consigo mismo) y genera un certificado
$csr
,$ca_certificate
,$private_key
,$days
,$options
= null
,$serial
= 0,$serial_hex
= null
openssl_csr_sign() genera un certificado x509 desde el CSR proporcionado.
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.
csr
Un CSR generado previamente por openssl_csr_new(). Sin embargo, esto también puede ser la ruta hacia un CSR codificado en formato PEM si se especifica con file://path/to/csr o una cadena exportada generada por openssl_csr_export().
ca_certificate
El certificado generado será firmado por el certificado ca_certificate
.
Si ca_certificate
es null
, el certificado generado será autosignado.
private_key
private_key
es la clave privada que corresponde al certificado
ca_certificate
.
days
days
especifica la duración para la cual el certificado
es válido, en número de días.
options
Se pueden ajustar las opciones de firma CSR con options
.
Consulte la función openssl_csr_new() para obtener más información sobre
options
.
serial
Un número de serie opcional para el certificado emitido. Si no se especifica, tendrá un valor de 0.
serial_hex
Una cadena hexadecimal opcional que representa el número de serie del
certificado emitido. Si se define, tiene prioridad sobre el valor
del parámetro serial
. Si no se especifica
o se define como null
, se utiliza el valor del parámetro
serial
en su lugar.
Devuelve una instancia de OpenSSLCertificate en caso de éxito, false
en caso contrario.
Versión | Descripción |
---|---|
8.4.0 |
Se ha añadido el parámetro serial_hex .
|
8.0.0 |
En caso de éxito, esta función devuelve ahora una instancia de
OpenSSLCertificate ; anteriormente se devolvía un
recurso de tipo OpenSSL X.509 .
|
8.0.0 |
csr ahora acepta una instancia de
OpenSSLCertificateSigningRequest ;
anteriormente se aceptaba un recurso de tipo OpenSSL X.509 CSR .
|
8.0.0 |
ca_certificate ahora acepta una instancia de
OpenSSLCertificate ;
anteriormente se aceptaba un recurso de tipo OpenSSL X.509 .
|
8.0.0 |
ca_certificate ahora acepta una instancia de
OpenSSLAsymmetricKey o OpenSSLCertificate ;
anteriormente se aceptaba un recurso de tipo OpenSSL key o
OpenSSL X.509 .
|
Ejemplo #1 Ejemplo con openssl_csr_sign() - firmar una CSR (cómo ser su propia Autoridad de Certificación)
<?php
// Supongamos que este script está configurado para recibir CSR que han
// sido pegados en un campo textarea desde otra página
$csrdata = $_POST["CSR"];
// Vamos a firmar la solicitud con nuestro propio certificado, como
// "autoridad de certificación". Puede utilizarse cualquier certificado para firmar otro,
// pero el proceso es inútil a menos que el certificado de firma tenga la confianza de los usuarios
// que utilizarán el nuevo certificado firmado.
// Necesitamos nuestro certificado y la clave privada
$cacert = "file://path/to/ca.crt";
$privkey = array("file://path/to/ca.key", "la_clave_secreta_de_su_certificado");
$usercert = openssl_csr_sign($csrdata, $cacert, $privkey, 365, array('digest_alg'=>'sha256') );
// Mostramos ahora el certificado generado, de forma que el usuario
// pueda copiarlo/pegarlo en su configuración local (como un
// archivo que contiene los certificados de su servidor SSL)
openssl_x509_export($usercert, $certout);
echo $certout;
// Muestra todos los errores ocurridos
while (($e = openssl_error_string()) !== false) {
echo $e . "\n";
}
?>