# openssl_csr_new

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

openssl_csr_new — Genera una CSR

### Descripción

openssl_csr_new(
array `$dn`,
resource `&$privkey`,
array `$configargs` = ?,
array `$extraattribs` = ?
): mixed

openssl_csr_new() genera una nueva CSR (Certificate Signing Request - Petición de Firma de Certificado) basada en la información proporcionada por `dn`, el cuál representa el Nombre Distinguido que se va a usar en el certificado.

> 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

`dn`

  El Nombre Distinguido que se va a usar en el certificado.

`privkey`

  `privkey` podría estar establecida a una clave privada que fue generada previamente por openssl_pkey_new() (o de otro modo, obtenida desde la otra familia de funciones openssl_pkey). La parte pública correspondiente de la clave será usada para firmar la CSR.

`configargs`

  Por defecto, la información de su sistema `openssl.conf` se usa para inicializar la petición; puede especificar una sección del archivo de configuración estableciendo la clave `config_sección_sección` de `configargs`. También puede especificar un archivo de configuración de openssl alternativo estableciendo el valor de la clave `config` a la ruta del archivo que quiere utilizar. Las siguientes claves, si están presentes en `configargs`, se comportan como sus equivalentes en el archivo `openssl.conf`, como está listado en la tabla de abajo.

  Sobrescritura de Configuración
  clave `configargs` | tipo | equivalente `openssl.conf` | descripción
  --- | --- | --- | ---
  digest_alg | string | default_md | Selecciona qué método de resumen (digest) se va a usar
  x509_extensions | string | x509_extensions | Selecciona qué extensiones debería usarse cuando se crea un certificado x509
  req_extensions | string | req_extensions | Selecciona qué extensiones debería usarse cuando se crea una CSR
  private_key_bits | integer | default_bits | Specifica cuántos bits deberían usarse para generar una clave privada
  private_key_type | integer | ninguno | Especifica el tipo de clave privada a crear. Ésta puede ser `OPENSSL_KEYTYPE_DSA`, `OPENSSL_KEYTYPE_DH` o `OPENSSL_KEYTYPE_RSA`. El valor por defecto es `OPENSSL_KEYTYPE_RSA` el cuál es el úncio tipo de clave soportado actualmente.
  encrypt_key | boolean | encrypt_key | ¿Debería ser encriptada una clave exportada (con frase de contraseña)?
  encrypt_key_cipher | integer | none | Una de las constantes de cipher.

`extraattribs`

  `extraattribs` se usa para especificar opciones de configuración adicionales para la CSR. Ambos, `dn` y `extraattribs`, son matrices asociativas cuyas claves son convertidas a identificadores de objetos y aplicadas a las partes relevantes de la petición.

### Valores devueltos

Devuelve la CSR.

### Ejemplos

Ejemplo #1 Crear un certificado autofirmado

`<?php
// Rellenar la información del nombre distinguido que se va a usar en el certificado
// Debe cambiar los valores de estas claves para que coincidan con su nombre y
// compañía, o para se más exactos, el nombre y la compañía de la persona/sitio
// para el que va a generar el certificado.
// Para los certificados SSL, el nombre común (commonName) normalmente es el nombre de
// dominio que va a usar el certificado, pero para certificados S/MIME,
// el nombre común será el nombre de la persona que usará el
// certificado.
$dn = array(
"countryName" => "UK",
"stateOrProvinceName" => "Somerset",
"localityName" => "Glastonbury",
"organizationName" => "The Brain Room Limited",
"organizationalUnitName" => "PHP Documentation Team",
"commonName" => "Wez Furlong",
"emailAddress" => "wez@example.com"
);
// Generar una nueva pareja de clave privada (y pública)
$privkey = openssl_pkey_new();
// Generar una petición de firma de certificado
$csr = openssl_csr_new($dn, $privkey);
// Normalmente querrá crear un certificado autofirmado en este
// punto hasta que su AC satisfaga su petición.
// Esto crea un certificado autofirmado que es válido por 365 días
$sscert = openssl_csr_sign($csr, null, $privkey, 365);
// Ahora querrá preservar su clave privada, CSR y certificado
// autofirmado por lo que pueden ser instalados en su servidor web, servidor de correo
// o cliente de correo (dependiendo del uso previsto para el certificado).
// Este ejemplo muestra cómo obtener estas cosas con variables, pero
// también puede almacenarlas directamente en archivos.
// Normalmente, enviará la CSR a su AC, la cuál se la emitirá después
// con el certificado "real".
openssl_csr_export($csr, $csrout) and var_dump($csrout);
openssl_x509_export($sscert, $certout) and var_dump($certout);
openssl_pkey_export($privkey, $pkeyout, "mypassword") and var_dump($pkeyout);
// Mostrar cualquier error que ocurra
while (($e = openssl_error_string()) !== false) {
echo $e . "\n";
}
?>`