(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
openssl_csr_new — Génère une CSR
$distinguished_names,&$private_key,$options = null,$extra_attributes = null
   openssl_csr_new() génère une nouvelle CSR (Certificate Signing Request,
   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.
distinguished_namesLe nom distingué ou champs de sujets qui doit être utilisé dans le certificat.
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)
       La clé publique sera utilisée pour signer la 
       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 de
       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.
       
| 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_RSAouOPENSSL_KEYTYPE_EC.
            La valeur par défaut estOPENSSL_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 options de configuration supplémentaires pour la CSR. Les deux
       paramètres distinguished_names et
       extra_attributes sont des tableaux associatifs dont les
       clés sont converties en OIDs et appliquées aux parties appropriées de la 
       requête.
      
   Retourne la CSR ou false si une erreur survient.
  
| Version | Description | 
|---|---|
| 8.0.0 | csraccepte désormais une instance de
       OpenSSLCertificateSigningRequest ;
       auparavant, une ressource de typeOpenSSL 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
       ressource de type OpenSSL keyétait retournée. | 
| 7.1.0 | optionssupporte désormaiscurve_name. | 
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');
?>