It's easier than all that, if you just want the keys:
<?php
// Create the keypair
$res=openssl_pkey_new();
// Get private key
openssl_pkey_export($res, $privkey);
// Get public key
$pubkey=openssl_pkey_get_details($res);
$pubkey=$pubkey["key"];
?>
openssl_pkey_new
(PHP 4 >= 4.2.0, PHP 5)
openssl_pkey_new — Génère une nouvelle clé privée
Description
openssl_pkey_new() génère une nouvelle paire de clés, une privée et une publique. La partie publique en est accessible via la fonction openssl_pkey_get_public().
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
- configargs
-
Vous pouvez calibrer la génération de la clé (comme le nombre de bits) en utilisant le paramètre configargs . Voir la fonction openssl_csr_new() pour plus de détails sur configargs .
Valeurs de retour
Retourne un identifiant de ressource pour la pkey en cas de succès, FALSE sinon.
openssl_pkey_new
02-Apr-2008 08:17
30-May-2004 07:17
As you probably found, getting the public key is not as direct as you might think with this documentation.
You can easily get into messages like:
Warning: openssl_pkey_get_public(): Don't know how to get public key from this private key (the documentation lied) in D:\www\keys.php on line 4
The correct steps to get the whole thing seem to be these:
<?
$dn = array("countryName" => 'XX', "stateOrProvinceName" => 'State', "localityName" => 'SomewhereCity', "organizationName" => 'MySelf', "organizationalUnitName" => 'Whatever', "commonName" => 'mySelf', "emailAddress" => 'user@domain.com');
$privkeypass = '1234';
$numberofdays = 365;
$privkey = openssl_pkey_new();
$csr = openssl_csr_new($dn, $privkey);
$sscert = openssl_csr_sign($csr, null, $privkey, $numberofdays);
openssl_x509_export($sscert, $publickey);
openssl_pkey_export($privkey, $privatekey, $privkeypass);
openssl_csr_export($csr, $csrStr);
echo $privatekey; // Will hold the exported PriKey
echo $publickey; // Will hold the exported PubKey
echo $csrStr; // Will hold the exported Certificate
?>
Now all you need to do is to make some research on each individual function.
