openssl_csr_new

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

openssl_csr_newGénère une CSR

Description

openssl_csr_new(
    array$distinguished_names,
    OpenSSLAsymmetricKey&$private_key,
    ?array$options = null,
    ?array$extra_attributes = null
): OpenSSLCertificateSigningRequest|false

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 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.

Écrasement de configuration
optionstypeÉquivalent de openssl.confdescription
digest_algstringdefault_mdMéthode de digeste ou signature de hachage, généralement un de openssl_get_md_methods()
x509_extensionsstringx509_extensionsSélectionne quelle extension utiliser lors de la création d'un certificat x509
req_extensionsstringreq_extensionsSélectionne quelle extension utiliser lors de la création d'une CSR
private_key_bitsintdefault_bitsSpécifie la longueur en bits de la clé privée
private_key_typeintnoneSpé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_keyboolencrypt_keyLa clé (avec mot de passe) exportée doit-elle être chiffrée?
encrypt_key_cipherintnone Une des constantes cipher.
curve_namestringnone Un de openssl_get_curve_names().
configstringN/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.

Valeurs de retour

Retourne la CSR ou false si une erreur survient.

Historique

VersionDescription
8.0.0csr accepte désormais une instance de OpenSSLCertificateSigningRequest ; auparavant, une ressource 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 ressource de type OpenSSL key était retournée.
7.1.0options 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
To Top