(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_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.
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 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 |
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');
?>