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:
- Apache
- PHP 5
- OpenSSL
- estensione di PHP “php_openssl” installata e attiva
- chiave privata e certificato di una C.A. (seguire il paragrafo “Generare una C.A.“)
- (facoltativo) OpenSSL configurato secondo le indicazioni del paragrafo “Configurazioni avanzate per la generazione di certificati“
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(); |
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!
dovresti dare qualche dettaglio in più, ad esempio in quale istruzione ricevi questo errore, quale S.O. stai utilizzando…
hai cercato su google la descrizione dell’errore?