<?php
    // Example CommonName
    $commonname="example.org";

    $keysize = 2048;
    $keysize = 4096;

    $days    = 365;
    $days    = 1825;

    // openssl conf
    $ssl = array(
        'private_key_bits'  => (int)$keysize,
        'private_key_type'  => 'OPENSSL_KEYTYPE_RSA',
        'digest_alg'        => 'sha256',
    );

    $alg = array(
        'digest_alg'        => 'sha256',
    );

    $sslcnf = array(
        'countryName'            => 'GR',
        'stateOrProvinceName'    => 'Attica',
        'localityName'           => 'Athens',
        'organizationName'       => 'Example Ltd',
        'organizationalUnitName' => 'The Web',
        'emailAddress'           => 'postmaster@example.org',
        'commonName'             => $commonname,
    );
    // Generates a new private key - return is a resource

    $private_key = openssl_pkey_new($ssl);

    // Gets an exportable representation of a key into a string
    // privkey: is the text output of resource: private_key
    openssl_pkey_export($private_key, $privkey);

    // Generate a certificate signing request
    $csr = openssl_csr_new($sslcnf, $private_key);

    // Self-Signed
    $req = openssl_csr_sign($csr, NULL, $private_key, $days, $alg);

    // Exports a certificate as a string
    openssl_x509_export($req, $x509);

    // Generate a certificate signing request
    $ret = array(
        'privkey' => $privkey,
        'cert'    => $x509,
    );
    echo json_encode($ret);

?>