(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,
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_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)
, 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.
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 options de configuration supplémentaires pour la CSR.
Les distinguished_names
et
extra_attributes
sont tous deux des tableaux associatifs, dont les clés
sont converties en OID et appliquées à la partie pertinente de la requête.
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.
Version | Description |
---|---|
8.0.0 |
csr 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.0 |
options supporte désormais curve_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');
?>