Come creare certificati SSL con PHP

In questo articolo metto a disposizione un semplice script in PHP con cui è possibile generare certificati SSL, sfruttanto le potenzialità di OpenSSL.

I prerequisiti sono:

Di seguito il codice necessario:

// Inserire i dati della persona per cui viene emesso il certificato
$dn = array(	"countryName"		=> "SM",
		"stateOrProvinceName"	=> "San Marino",
		"localityName"		=> "San Marino",
		"organizationName"	=> "VenCom",
		"organizationalUnitName"=> "Web",
		"commonName"		=> "John Smith",
		"emailAddress"		=> "john@example.com"
);
 
$config = array('config'		=> '/etc/ssl/openssl.cnf',
		'x509_extensions'	=> 'client_cert'
);
 
// serial number:_16 cifre esadecimali
$serial = mt_rand(1, 2147483647) . mt_rand(1, 2147483647);
 
// certificato client
$nomecert	= 'user';
$friendly_name	= 'John Smith Certificate';
$pwdexp		= 'ciao';
 
// si presuppone che i certificati siano nella stessa directory di questo file
$path = dirname(__FILE__).'/';
 
// certificato e chiave CA
$ca_crt = $path."my-ca.crt";
$ca_key = $path."my-ca.key";
$ca_pwd = 'pippo';
 
// generazione chiave privata
$privkey = openssl_pkey_new();
 
// generazione della richiesta di certificazione
$csrdata = openssl_csr_new($dn, $privkey);
 
// caricamento della CA (chiave privata a certificato)
$cacert = file_get_contents($ca_crt);
$cakey  = array(file_get_contents($ca_key), $ca_pwd);
 
// Firma della richiesta con il certificato della nostra CA
$usercert = openssl_csr_sign($csrdata, $cacert, $cakey, 365, $config, $serial);
 
// esportazione del certificato in formato *.crt
openssl_x509_export($usercert, $certout);
file_put_contents("$nomecert.crt",$certout);
//echo $certout;
 
// esportazione del certificato in formato PKCS#12
openssl_pkcs12_export_to_file($certout, "$nomecert.p12", $privkey, $pwdexp,
				array('friendly_name'=>$friendly_name));
 
// mostra gli eventuali errori
while (($e = openssl_error_string()) !== false)
{
    echo $e . "\n";
}

Se non seguite il punto facoltativo dovete sostituire nel codice la riga:

$config = array(  'config'          => '/etc/ssl/openssl.cnf',
                  'x509_extensions' => 'client_cert'
);

con:

$config = array();

Risorse

http://www.php.net/manual/en/book.openssl.php

3 thoughts to “Come creare certificati SSL con PHP”

  1. Pingback: Certificato
  2. mi da il seguente errore

    error:0E06D06C:configuration file routines:NCONF_get_string:no value error:0E06D06C:configuration file routines:NCONF_get_string:no value error:0E06D06C:configuration file routines:NCONF_get_string:no value error:0E06D06C:configuration file routines:NCONF_get_string:no value error:0E06D06C:configuration file routines:NCONF_get_string:no value error:0E06D06C:configuration file routines:NCONF_get_string:no value error:0E06D06C:configuration file routines:NCONF_get_string:no value error:0E06D06C:configuration file routines:NCONF_get_string:no value error:0906D06C:PEM routines:PEM_read_bio:no start line

    Cosa devo fare!??! sto impazzendo..
    grazie!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.