openssl_csr_sign

(PHP 4 >= 4.2.0)

openssl_csr_sign -- Signe un certificat avec un autre certificat

Description

resource openssl_csr_sign ( mixed csr, mixed cacert, mixed priv_key, int days)

openssl_csr_sign() génère un certificat x509 (une ressource) depuis la CSR csr, générée précédemment par openssl_csr_new(), mais ce paramètre peut aussi être une CSR encodée au format PEM, et spécifiée avec file://path/to/csr ou une chaîne exportée par openssl_csr_export(). Le certificat généré sera signé par le certificat cacert. Si cacert vaut NULL, le certificat généré sera auto-signé. priv_key est la clé privée qui correspond au certificat cacert. days spécifie la durée pour laquelle le certificat est valide, en nombre de jour.

openssl_csr_sign() retourne une ressource de certificat x509 en cas de succès, et FALSE sinon.

Note : Vous devez installer un fichier openssl.cnf valide pour que cette fonction opère correctement. Voyez les notes dans la section installation pour plus d'informations.

Exemple 1. Exemple avec openssl_csr_sign() : signer une CSR (comment réaliser votre propre autorité de certification)

// Supposont que ce script est configuré pour recevoir des CSR qui ont
// été collé dans un champ textarea depuis une autre page
$csrdata = $_POST["CSR"];

// Nous allons signer la requête avec notre propre certificat, en tant
// qu'"autorité de certification". Vous pouvez utiliser n'importe quel
// certificat pour en signer un autre, mais le processus est inutile à moins
// que le certificat de signature n'ai la confiance des utilisateurs
// qui utiliseront le nouveau certificat signé.

// Nous avons besoin de notre certificat et de la clé privée
$cacert = "file://path/to/ca.crt";
$privkey = array("file://path/to/ca.key", "la_cle_secrete_de_votre_certificat");

$userscert = openssl_csr_sign($csrdata, $cacert, $privkey, 365);

// Affichons maintenant le certificat généré, ce façon à ce que l'utilisateur
// puisse le copier/coller dans leur configuration locale ( comme par exemple un
// fichier qui contient les certificats de leur serveur SSL)
openssl_x509_export($usercert, $certout) and echo $certout;

// Affiche toutes les erreurs survenues
while (($e = openssl_error_string()) !== false) {
    echo $e . "\n";
}