# openssl_csr_new

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

openssl_csr_new — Génère une CSR

### Description

openssl_csr_new(
array `$distinguished_names`,
#[\SensitiveParameter] ?OpenSSLAsymmetricKey `&$private_key`,
?array `$options` = `null`,
?array `$extra_attributes` = `null`
): OpenSSLCertificateSigningRequest|bool

openssl_csr_new() génère une nouvelle CSR, requête de signature de certificat), basée sur les informations apportés par `distinguished_names`.

> Note: Vous devez avoir un fichier openssl.cnf valide et installé pour que cette fonction opère correctement. Voir les notes se trouvant dans la section concernant l'installation pour plus d'informations.

### Liste de paramètres

`distinguished_names`

  Le nom distinctif (Distinguished Name) ou les champs du sujet à inclure dans le certificat. Le `distinguished_names` est un tableau associatif dont les clés représentent les noms d'attributs des Distinguished Names, et les valeurs peuvent être soit des chaînes (pour une valeur unique) soit des tableaux (si plusieurs valeurs doivent être définies).

`private_key`

  `private_key` doit être une clé privée qui a été générée par openssl_pkey_new() (ou obtenue autrement par l'une des fonctions de la famille openssl_pkey) , ou la variable `null`. Si sa valeur est une variable `null`, une nouvelle clé privée est générée en fonction des `options` fournies et assignée à la variable fournie. La partie publique correspondante de la clé sera utilisée pour signer le CSR.

`options`

  Par défaut, le fichier `openssl.conf` de votre système est utilisé pour initialiser la requête; vous pouvez spécifier une section du fichier de configuration en paramétrant la clé `config_section_section` dans `options`. Vous pouvez aussi spécifier un fichier de configuration OpenSSL alternatif en paramétrant la valeur de `config` avec le chemin du fichier à utiliser. Si les clés suivantes sont présentes dans `options`, elles se comportent comme leurs équivalents dans `openssl.conf`, selon la liste suivante.

  Écrasement de configuration
  `options` | type | Équivalent de `openssl.conf` | description
  --- | --- | --- | ---
  digest_alg | string | default_md | Méthode de digeste ou signature de hachage, généralement un de openssl_get_md_methods()
  x509_extensions | string | x509_extensions | Sélectionne quelle extension utiliser lors de la création d'un certificat x509
  req_extensions | string | req_extensions | Sélectionne quelle extension utiliser lors de la création d'une CSR
  private_key_bits | int | default_bits | Spécifie la longueur en bits de la clé privée
  private_key_type | int | none | Spécifie le type de clé privée à créer. Cela peut être l'un de `OPENSSL_KEYTYPE_DSA`, `OPENSSL_KEYTYPE_DH`, `OPENSSL_KEYTYPE_RSA` ou `OPENSSL_KEYTYPE_EC`. La valeur par défaut est `OPENSSL_KEYTYPE_RSA`.
  encrypt_key | bool | encrypt_key | La clé (avec mot de passe) exportée doit-elle être chiffrée?
  encrypt_key_cipher | int | none | Une des constantes cipher.
  curve_name | string | none | Un de openssl_get_curve_names().
  config | string | N/A | Chemin vers votre fichier openssl.conf alternatif.

`extra_attributes`

  `extra_attributes` est utilisé pour spécifier des attributs supplémentaires pour le CSR. Il s'agit d'un tableau associatif dont les clés sont converties en OID et appliquées comme attributs de CSR.

### Valeurs de retour

Retourne le CSR en cas de succès, `true` si la création du CSR réussit mais que la signature échoue ou `false` si une erreur survient.

### Historique

Version | Description
--- | ---
8.4.0 | Le tableau associatif `distinguished_names` prend désormais en charge les tableaux en tant que valeurs, permettant de spécifier plusieurs valeurs pour un même attribut.
8.4.0 | Le paramètre `extra_attributes` définit désormais correctement les attributs du CSR, au lieu de modifier le nom distinctif du sujet comme il le faisait auparavant de manière incorrecte.
8.0.0 | `csr` accepte désormais une instance de OpenSSLCertificateSigningRequest ; auparavant, une resource de type `OpenSSL X.509 CSR` était acceptée.
8.0.0 | En cas de succès, cette fonction retourne désormais une instance de OpenSSLAsymmetricKey ; auparavant une resource de type `OpenSSL key` était retournée.
7.1.0 | `options` supporte désormais `curve_name`.

### Exemples

Exemple #1 Création d'un certificat autosigné

`<?php
// pour les certificats SSL serveur, le commonName est le nom de domaine à sécuriser
// pour les certificats e-mail S/MIME le commonName est le propriétaire de l'adresse e-mail
// les champs d'emplacement et d'identification font référence au propriétaire du domaine ou à l'objet de l'e-mail à sécuriser
$dn = array(
"countryName" => "GB",
"stateOrProvinceName" => "Somerset",
"localityName" => "Glastonbury",
"organizationName" => "The Brain Room Limited",
"organizationalUnitName" => "PHP Documentation Team",
"commonName" => "Wez Furlong",
"emailAddress" => "wez@example.com"
);
// Génère une nouvelle paire de clés privée (et publique)
$privkey = openssl_pkey_new(array(
"private_key_bits" => 2048,
"private_key_type" => OPENSSL_KEYTYPE_RSA,
));
// Génère une requête de signature de certificat
$csr = openssl_csr_new($dn, $privkey, array('digest_alg' => 'sha256'));
// Génère un certificat autosigné, valide pour 365 jours
$x509 = openssl_csr_sign($csr, null, $privkey, $days=365, array('digest_alg' => 'sha256'));
// Conservez votre clé privée, CSR et certificat autosigné pour une utilisation ultérieur
openssl_csr_export($csr, $csrout) and var_dump($csrout);
openssl_x509_export($x509, $certout) and var_dump($certout);
openssl_pkey_export($privkey, $pkeyout, "mypassword") and var_dump($pkeyout);
// Affiche les erreurs qui sont survenues
while (($e = openssl_error_string()) !== false) {
echo $e . "\n";
}
?>`

Exemple #2 Créer un certficat ECC autosigné (à partir de PHP 7.1.0)

`<?php
$subject = array(
"commonName" => "docs.php.net",
);
// Génère une nouvelle paire de clés privée (et publique)
$private_key = openssl_pkey_new(array(
"private_key_type" => OPENSSL_KEYTYPE_EC,
"curve_name" => 'prime256v1',
));
// Génère une requête de signature de certificat
$csr = openssl_csr_new($subject, $private_key, array('digest_alg' => 'sha384'));
// Génère un certificat EC autosigné
$x509 = openssl_csr_sign($csr, null, $private_key, $days=365, array('digest_alg' => 'sha384'));
openssl_x509_export_to_file($x509, 'ecc-cert.pem');
openssl_pkey_export_to_file($private_key, 'ecc-private.key');
?>`

### Voir aussi

- openssl_csr_sign() - Signe un CSR avec un autre certificat (ou lui-même) et génère un certificat