diff --git a/src/www/system_camanager.php b/src/www/system_camanager.php
index 69d1d8b08..ea6a95ab5 100644
--- a/src/www/system_camanager.php
+++ b/src/www/system_camanager.php
@@ -31,110 +31,111 @@ require_once('guiconfig.inc');
require_once("system.inc");
function ca_import(& $ca, $str, $key="", $serial=0) {
- global $config;
+ global $config;
- $ca['crt'] = base64_encode($str);
- if (!empty($key))
- $ca['prv'] = base64_encode($key);
- if (!empty($serial))
- $ca['serial'] = $serial;
- $subject = cert_get_subject($str, false);
- $issuer = cert_get_issuer($str, false);
+ $ca['crt'] = base64_encode($str);
+ if (!empty($key)) {
+ $ca['prv'] = base64_encode($key);
+ }
+ if (!empty($serial)) {
+ $ca['serial'] = $serial;
+ }
+ $subject = cert_get_subject($str, false);
+ $issuer = cert_get_issuer($str, false);
- // Find my issuer unless self-signed
- if($issuer <> $subject) {
- $issuer_crt =& lookup_ca_by_subject($issuer);
- if($issuer_crt)
- $ca['caref'] = $issuer_crt['refid'];
- }
+ // Find my issuer unless self-signed
+ if($issuer <> $subject) {
+ $issuer_crt =& lookup_ca_by_subject($issuer);
+ if($issuer_crt) {
+ $ca['caref'] = $issuer_crt['refid'];
+ }
+ }
- /* Correct if child certificate was loaded first */
- if (is_array($config['ca']))
- foreach ($config['ca'] as & $oca)
- {
- $issuer = cert_get_issuer($oca['crt']);
- if($ca['refid']<>$oca['refid'] && $issuer==$subject)
- $oca['caref'] = $ca['refid'];
- }
- if (is_array($config['cert']))
- foreach ($config['cert'] as & $cert)
- {
- $issuer = cert_get_issuer($cert['crt']);
- if($issuer==$subject)
- $cert['caref'] = $ca['refid'];
- }
- return true;
+ /* Correct if child certificate was loaded first */
+ if (is_array($config['ca'])) {
+ foreach ($config['ca'] as & $oca) {
+ $issuer = cert_get_issuer($oca['crt']);
+ if($ca['refid']<>$oca['refid'] && $issuer==$subject) {
+ $oca['caref'] = $ca['refid'];
+ }
+ }
+ }
+ if (is_array($config['cert'])) {
+ foreach ($config['cert'] as & $cert) {
+ $issuer = cert_get_issuer($cert['crt']);
+ if($issuer==$subject) {
+ $cert['caref'] = $ca['refid'];
+ }
+ }
+ }
+ return true;
}
function ca_inter_create(&$ca, $keylen, $lifetime, $dn, $caref, $digest_alg = 'sha256')
{
- // Create Intermediate Certificate Authority
- $signing_ca = &lookup_ca($caref);
- if (!$signing_ca) {
- return false;
- }
+ // Create Intermediate Certificate Authority
+ $signing_ca = &lookup_ca($caref);
+ if (!$signing_ca) {
+ return false;
+ }
- $signing_ca_res_crt = openssl_x509_read(base64_decode($signing_ca['crt']));
- $signing_ca_res_key = openssl_pkey_get_private(array(0 => base64_decode($signing_ca['prv']) , 1 => ""));
- if (!$signing_ca_res_crt || !$signing_ca_res_key) {
- return false;
- }
- $signing_ca_serial = ++$signing_ca['serial'];
+ $signing_ca_res_crt = openssl_x509_read(base64_decode($signing_ca['crt']));
+ $signing_ca_res_key = openssl_pkey_get_private(array(0 => base64_decode($signing_ca['prv']) , 1 => ""));
+ if (!$signing_ca_res_crt || !$signing_ca_res_key) {
+ return false;
+ }
+ $signing_ca_serial = ++$signing_ca['serial'];
- $args = array(
- 'config' => '/usr/local/etc/ssl/opnsense.cnf',
- 'private_key_type' => OPENSSL_KEYTYPE_RSA,
- 'private_key_bits' => (int)$keylen,
- 'x509_extensions' => 'v3_ca',
- 'digest_alg' => $digest_alg,
- 'encrypt_key' => false
- );
+ $args = array(
+ 'config' => '/usr/local/etc/ssl/opnsense.cnf',
+ 'private_key_type' => OPENSSL_KEYTYPE_RSA,
+ 'private_key_bits' => (int)$keylen,
+ 'x509_extensions' => 'v3_ca',
+ 'digest_alg' => $digest_alg,
+ 'encrypt_key' => false
+ );
- // generate a new key pair
- $res_key = openssl_pkey_new($args);
- if (!$res_key) {
- return false;
- }
+ // generate a new key pair
+ $res_key = openssl_pkey_new($args);
+ if (!$res_key) {
+ return false;
+ }
- // generate a certificate signing request
- $res_csr = openssl_csr_new($dn, $res_key, $args);
- if (!$res_csr) {
- return false;
- }
+ // generate a certificate signing request
+ $res_csr = openssl_csr_new($dn, $res_key, $args);
+ if (!$res_csr) {
+ return false;
+ }
- // Sign the certificate
- $res_crt = openssl_csr_sign($res_csr, $signing_ca_res_crt, $signing_ca_res_key, $lifetime, $args, $signing_ca_serial);
- if (!$res_crt) {
- return false;
- }
+ // Sign the certificate
+ $res_crt = openssl_csr_sign($res_csr, $signing_ca_res_crt, $signing_ca_res_key, $lifetime, $args, $signing_ca_serial);
+ if (!$res_crt) {
+ return false;
+ }
- // export our certificate data
- if (!openssl_pkey_export($res_key, $str_key) ||
- !openssl_x509_export($res_crt, $str_crt)) {
- return false;
- }
+ // export our certificate data
+ if (!openssl_pkey_export($res_key, $str_key) ||
+ !openssl_x509_export($res_crt, $str_crt)) {
+ return false;
+ }
- // return our ca information
- $ca['crt'] = base64_encode($str_crt);
- $ca['prv'] = base64_encode($str_key);
- $ca['serial'] = 0;
+ // return our ca information
+ $ca['crt'] = base64_encode($str_crt);
+ $ca['prv'] = base64_encode($str_key);
+ $ca['serial'] = 0;
- return true;
+ return true;
}
-$ca_methods = array(
- "existing" => gettext("Import an existing Certificate Authority"),
- "internal" => gettext("Create an internal Certificate Authority"),
- "intermediate" => gettext("Create an intermediate Certificate Authority"));
$ca_keylens = array( "512", "1024", "2048", "4096");
$openssl_digest_algs = array("sha1", "sha224", "sha256", "sha384", "sha512");
-if (isset($_GET['id']) && is_numericint($_GET['id'])) {
- $id = $_GET['id'];
+if (!is_array($config['cert'])) {
+ $config['cert'] = array();
}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
+if (!isset($config['crl']) || !is_array($config['crl'])) {
+ $config['crl'] = array();
}
if (!isset($config['ca']) || !is_array($config['ca'])) {
@@ -143,268 +144,271 @@ if (!isset($config['ca']) || !is_array($config['ca'])) {
$a_ca =& $config['ca'];
-if (!is_array($config['cert'])) {
- $config['cert'] = array();
-}
-
-$a_cert =& $config['cert'];
-
-if (!isset($config['crl']) || !is_array($config['crl'])) {
- $config['crl'] = array();
-}
-
-$a_crl =& $config['crl'];
-
-$act=null;
-if (isset($_GET['act'])) {
- $act = $_GET['act'];
-} elseif (isset($_POST['act'])) {
- $act = $_POST['act'];
-}
-
-if ($act == "del") {
- if (!isset($a_ca[$id])) {
- header("Location: system_camanager.php");
- exit;
+if ($_SERVER['REQUEST_METHOD'] === 'GET') {
+ if (isset($a_ca[$_GET['id']])) {
+ $id = $_GET['id'];
}
- $index = count($a_cert) - 1;
- for (; $index >=0; $index--) {
- if (isset($a_cert[$index]['caref']) && isset($a_ca[$id]['refid']) && $a_cert[$index]['caref'] == $a_ca[$id]['refid']) {
- unset($a_cert[$index]);
- }
- }
-
- $index = count($a_crl) - 1;
- for (; $index >=0; $index--) {
- if ($a_crl[$index]['caref'] == $a_ca[$id]['refid']) {
- unset($a_crl[$index]);
- }
- }
-
- $name = $a_ca[$id]['descr'];
- unset($a_ca[$id]);
- write_config();
- $savemsg = sprintf(gettext("Certificate Authority %s and its CRLs (if any) successfully deleted"), $name) . " ";
- header("Location: system_camanager.php");
- exit;
-}
-
-if ($act == "edit") {
- if (!isset($a_ca[$id])) {
- header("Location: system_camanager.php");
- exit;
- }
- $pconfig['descr'] = $a_ca[$id]['descr'];
- $pconfig['refid'] = $a_ca[$id]['refid'];
- $pconfig['cert'] = base64_decode($a_ca[$id]['crt']);
- $pconfig['serial'] = $a_ca[$id]['serial'];
- if (!empty($a_ca[$id]['prv'])) {
- $pconfig['key'] = base64_decode($a_ca[$id]['prv']);
- }
-}
-
-if ($act == "new") {
- if (isset($_GET['method'])) {
- $pconfig['method'] = $_GET['method'];
+ if (isset($_GET['act'])) {
+ $act = $_GET['act'];
} else {
- $pconfig['method'] = null ;
+ $act = null;
}
- $pconfig['keylen'] = "2048";
- $pconfig['digest_alg'] = "sha256";
- $pconfig['lifetime'] = "365";
- $pconfig['dn_commonname'] = "internal-ca";
-}
-if ($act == "exp") {
- if (!$a_ca[$id]) {
- header("Location: system_camanager.php");
+ // set defaults
+ $pconfig = array();
+ $pconfig['camethod'] = null ;
+ $pconfig['descr'] = null;
+ $pconfig['serial'] = null;
+ $pconfig['lifetime'] = null;
+ $pconfig['dn_country'] = null;
+ $pconfig['dn_state'] = null;
+ $pconfig['dn_city'] = null;
+ $pconfig['dn_organization'] = null;
+ $pconfig['dn_email'] = null;
+ $pconfig['dn_commonname'] = null;
+
+
+ if ($act == "edit") {
+ if (!isset($id)) {
+ header("Location: system_camanager.php");
+ exit;
+ }
+ $pconfig['descr'] = $a_ca[$id]['descr'];
+ $pconfig['refid'] = $a_ca[$id]['refid'];
+ $pconfig['cert'] = base64_decode($a_ca[$id]['crt']);
+ $pconfig['serial'] = $a_ca[$id]['serial'];
+ if (!empty($a_ca[$id]['prv'])) {
+ $pconfig['key'] = base64_decode($a_ca[$id]['prv']);
+ }
+ } elseif ($act == "new") {
+ if (isset($_GET['method'])) {
+ $pconfig['camethod'] = $_GET['method'];
+ }
+ $pconfig['refid'] = null;
+ $pconfig['keylen'] = "2048";
+ $pconfig['digest_alg'] = "sha256";
+ $pconfig['lifetime'] = "365";
+ $pconfig['dn_commonname'] = "internal-ca";
+ } elseif ($act == "exp") {
+ if (!isset($id)) {
+ header("Location: system_camanager.php");
+ exit;
+ }
+
+ $exp_name = urlencode("{$a_ca[$id]['descr']}.crt");
+ $exp_data = base64_decode($a_ca[$id]['crt']);
+ $exp_size = strlen($exp_data);
+
+ header("Content-Type: application/octet-stream");
+ header("Content-Disposition: attachment; filename={$exp_name}");
+ header("Content-Length: $exp_size");
+ echo $exp_data;
+ exit;
+ } elseif ($act == "expkey") {
+ if (!isset($id)) {
+ header("Location: system_camanager.php");
+ exit;
+ }
+
+ $exp_name = urlencode("{$a_ca[$id]['descr']}.key");
+ $exp_data = base64_decode($a_ca[$id]['prv']);
+ $exp_size = strlen($exp_data);
+
+ header("Content-Type: application/octet-stream");
+ header("Content-Disposition: attachment; filename={$exp_name}");
+ header("Content-Length: $exp_size");
+ echo $exp_data;
exit;
}
+} elseif ($_SERVER['REQUEST_METHOD'] === 'POST') {
+ if (isset($a_ca[$_POST['id']])) {
+ $id = $_POST['id'];
+ }
+ if (isset($_POST['act'])) {
+ $act = $_POST['act'];
+ } else {
+ $act = null;
+ }
- $exp_name = urlencode("{$a_ca[$id]['descr']}.crt");
- $exp_data = base64_decode($a_ca[$id]['crt']);
- $exp_size = strlen($exp_data);
+ if ($act == "del") {
+ if (!isset($id)) {
+ header("Location: system_camanager.php");
+ exit;
+ }
+ $a_cert =& $config['cert'];
+ $index = count($a_cert) - 1;
+ for (; $index >=0; $index--) {
+ if (isset($a_cert[$index]['caref']) && isset($a_ca[$id]['refid']) && $a_cert[$index]['caref'] == $a_ca[$id]['refid']) {
+ unset($a_cert[$index]);
+ }
+ }
- header("Content-Type: application/octet-stream");
- header("Content-Disposition: attachment; filename={$exp_name}");
- header("Content-Length: $exp_size");
- echo $exp_data;
- exit;
-}
+ $a_crl =& $config['crl'];
+ $index = count($a_crl) - 1;
+ for (; $index >=0; $index--) {
+ if ($a_crl[$index]['caref'] == $a_ca[$id]['refid']) {
+ unset($a_crl[$index]);
+ }
+ }
-if ($act == "expkey") {
- if (!$a_ca[$id]) {
+ unset($a_ca[$id]);
+ write_config();
header("Location: system_camanager.php");
exit;
- }
+ } else {
+ $input_errors = array();
+ $pconfig = $_POST;
- $exp_name = urlencode("{$a_ca[$id]['descr']}.key");
- $exp_data = base64_decode($a_ca[$id]['prv']);
- $exp_size = strlen($exp_data);
-
- header("Content-Type: application/octet-stream");
- header("Content-Disposition: attachment; filename={$exp_name}");
- header("Content-Length: $exp_size");
- echo $exp_data;
- exit;
-}
-
-if ($_POST) {
- unset($input_errors);
- $input_errors = array();
- $pconfig = $_POST;
-
- /* input validation */
- if ($pconfig['method'] == "existing") {
- $reqdfields = explode(" ", "descr cert");
- $reqdfieldsn = array(
- gettext("Descriptive name"),
- gettext("Certificate data"));
- if ($_POST['cert'] && (!strstr($_POST['cert'], "BEGIN CERTIFICATE") || !strstr($_POST['cert'], "END CERTIFICATE"))) {
- $input_errors[] = gettext("This certificate does not appear to be valid.");
+ /* input validation */
+ if ($pconfig['camethod'] == "existing") {
+ $reqdfields = explode(" ", "descr cert");
+ $reqdfieldsn = array(
+ gettext("Descriptive name"),
+ gettext("Certificate data"));
+ if (!empty($pconfig['cert']) && (!strstr($pconfig['cert'], "BEGIN CERTIFICATE") || !strstr($pconfig['cert'], "END CERTIFICATE"))) {
+ $input_errors[] = gettext("This certificate does not appear to be valid.");
+ }
+ if (!empty($pconfig['key']) && strstr($pconfig['key'], "ENCRYPTED")) {
+ $input_errors[] = gettext("Encrypted private keys are not yet supported.");
+ }
+ } elseif ($pconfig['camethod'] == "internal") {
+ $reqdfields = explode(
+ " ",
+ "descr keylen lifetime dn_country dn_state dn_city ".
+ "dn_organization dn_email dn_commonname"
+ );
+ $reqdfieldsn = array(
+ gettext("Descriptive name"),
+ gettext("Key length"),
+ gettext("Lifetime"),
+ gettext("Distinguished name Country Code"),
+ gettext("Distinguished name State or Province"),
+ gettext("Distinguished name City"),
+ gettext("Distinguished name Organization"),
+ gettext("Distinguished name Email Address"),
+ gettext("Distinguished name Common Name"));
+ } elseif ($pconfig['camethod'] == "intermediate") {
+ $reqdfields = explode(
+ " ",
+ "descr caref keylen lifetime dn_country dn_state dn_city ".
+ "dn_organization dn_email dn_commonname"
+ );
+ $reqdfieldsn = array(
+ gettext("Descriptive name"),
+ gettext("Signing Certificate Authority"),
+ gettext("Key length"),
+ gettext("Lifetime"),
+ gettext("Distinguished name Country Code"),
+ gettext("Distinguished name State or Province"),
+ gettext("Distinguished name City"),
+ gettext("Distinguished name Organization"),
+ gettext("Distinguished name Email Address"),
+ gettext("Distinguished name Common Name"));
}
- if ($_POST['key'] && strstr($_POST['key'], "ENCRYPTED")) {
- $input_errors[] = gettext("Encrypted private keys are not yet supported.");
- }
- }
- if ($pconfig['method'] == "internal") {
- $reqdfields = explode(
- " ",
- "descr keylen lifetime dn_country dn_state dn_city ".
- "dn_organization dn_email dn_commonname"
- );
- $reqdfieldsn = array(
- gettext("Descriptive name"),
- gettext("Key length"),
- gettext("Lifetime"),
- gettext("Distinguished name Country Code"),
- gettext("Distinguished name State or Province"),
- gettext("Distinguished name City"),
- gettext("Distinguished name Organization"),
- gettext("Distinguished name Email Address"),
- gettext("Distinguished name Common Name"));
- }
- if ($pconfig['method'] == "intermediate") {
- $reqdfields = explode(
- " ",
- "descr caref keylen lifetime dn_country dn_state dn_city ".
- "dn_organization dn_email dn_commonname"
- );
- $reqdfieldsn = array(
- gettext("Descriptive name"),
- gettext("Signing Certificate Authority"),
- gettext("Key length"),
- gettext("Lifetime"),
- gettext("Distinguished name Country Code"),
- gettext("Distinguished name State or Province"),
- gettext("Distinguished name City"),
- gettext("Distinguished name Organization"),
- gettext("Distinguished name Email Address"),
- gettext("Distinguished name Common Name"));
- }
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
- if ($pconfig['method'] != "existing") {
- /* Make sure we do not have invalid characters in the fields for the certificate */
- for ($i = 0; $i < count($reqdfields); $i++) {
- if ($reqdfields[$i] == 'dn_email') {
- if (preg_match("/[\!\#\$\%\^\(\)\~\?\>\<\&\/\\\,\"\']/", $_POST["dn_email"])) {
- $input_errors[] = gettext("The field 'Distinguished name Email Address' contains invalid characters.");
+ do_input_validation($pconfig, $reqdfields, $reqdfieldsn, $input_errors);
+ if ($pconfig['camethod'] != "existing") {
+ /* Make sure we do not have invalid characters in the fields for the certificate */
+ for ($i = 0; $i < count($reqdfields); $i++) {
+ if ($reqdfields[$i] == 'dn_email') {
+ if (preg_match("/[\!\#\$\%\^\(\)\~\?\>\<\&\/\\\,\"\']/", $pconfig["dn_email"])) {
+ $input_errors[] = gettext("The field 'Distinguished name Email Address' contains invalid characters.");
+ }
+ } elseif ($reqdfields[$i] == 'dn_commonname') {
+ if (preg_match("/[\!\@\#\$\%\^\(\)\~\?\>\<\&\/\\\,\"\']/", $pconfig["dn_commonname"])) {
+ $input_errors[] = gettext("The field 'Distinguished name Common Name' contains invalid characters.");
+ }
+ } elseif (($reqdfields[$i] != "descr") && preg_match("/[\!\@\#\$\%\^\(\)\~\?\>\<\&\/\\\,\.\"\']/", $pconfig["$reqdfields[$i]"])) {
+ $input_errors[] = sprintf(gettext("The field '%s' contains invalid characters."), $reqdfieldsn[$i]);
}
- } elseif ($reqdfields[$i] == 'dn_commonname') {
- if (preg_match("/[\!\@\#\$\%\^\(\)\~\?\>\<\&\/\\\,\"\']/", $_POST["dn_commonname"])) {
- $input_errors[] = gettext("The field 'Distinguished name Common Name' contains invalid characters.");
- }
- } elseif (($reqdfields[$i] != "descr") && preg_match("/[\!\@\#\$\%\^\(\)\~\?\>\<\&\/\\\,\.\"\']/", $_POST["$reqdfields[$i]"])) {
- $input_errors[] = sprintf(gettext("The field '%s' contains invalid characters."), $reqdfieldsn[$i]);
+ }
+ if (!in_array($pconfig["keylen"], $ca_keylens)) {
+ $input_errors[] = gettext("Please select a valid Key Length.");
+ }
+ if (!in_array($pconfig["digest_alg"], $openssl_digest_algs)) {
+ $input_errors[] = gettext("Please select a valid Digest Algorithm.");
}
}
- if (!in_array($_POST["keylen"], $ca_keylens)) {
- $input_errors[] = gettext("Please select a valid Key Length.");
- }
- if (!in_array($_POST["digest_alg"], $openssl_digest_algs)) {
- $input_errors[] = gettext("Please select a valid Digest Algorithm.");
- }
- }
- /* save modifications */
- if (!$input_errors) {
- $ca = array();
- if (!isset($pconfig['refid']) || empty($pconfig['refid'])) {
- $ca['refid'] = uniqid();
- } else {
- $ca['refid'] = $pconfig['refid'];
- }
+ /* save modifications */
+ if (count($input_errors) == 0) {
+ $ca = array();
- if (isset($id) && $a_ca[$id]) {
- $ca = $a_ca[$id];
- }
-
- if (isset($pconfig['descr'])) {
- $ca['descr'] = $pconfig['descr'];
- } else {
- $ca['descr'] = null;
- }
-
- if (isset($_POST['edit']) && $_POST['edit'] == "edit") {
- $ca['descr'] = $pconfig['descr'];
- $ca['refid'] = $pconfig['refid'];
- $ca['serial'] = $pconfig['serial'];
- $ca['crt'] = base64_encode($pconfig['cert']);
- if (!empty($pconfig['key'])) {
- $ca['prv'] = base64_encode($pconfig['key']);
+ if (isset($id)) {
+ $ca = $a_ca[$id];
+ } else {
+ $ca['refid'] = uniqid();
}
- } else {
- $old_err_level = error_reporting(0); /* otherwise openssl_ functions throw warings directly to a page screwing menu tab */
- if ($pconfig['method'] == "existing") {
- ca_import($ca, $pconfig['cert'], $pconfig['key'], $pconfig['serial']);
- } elseif ($pconfig['method'] == "internal") {
- $dn = array(
- 'countryName' => $pconfig['dn_country'],
- 'stateOrProvinceName' => $pconfig['dn_state'],
- 'localityName' => $pconfig['dn_city'],
- 'organizationName' => $pconfig['dn_organization'],
- 'emailAddress' => $pconfig['dn_email'],
- 'commonName' => $pconfig['dn_commonname']);
- if (!ca_create($ca, $pconfig['keylen'], $pconfig['lifetime'], $dn, $pconfig['digest_alg'])) {
- $input_errors = array();
- while ($ssl_err = openssl_error_string()) {
- $input_errors[] = gettext("openssl library returns:") . " " . $ssl_err;
- }
- }
- } elseif ($pconfig['method'] == "intermediate") {
- $dn = array(
- 'countryName' => $pconfig['dn_country'],
- 'stateOrProvinceName' => $pconfig['dn_state'],
- 'localityName' => $pconfig['dn_city'],
- 'organizationName' => $pconfig['dn_organization'],
- 'emailAddress' => $pconfig['dn_email'],
- 'commonName' => $pconfig['dn_commonname']);
- if (!ca_inter_create($ca, $pconfig['keylen'], $pconfig['lifetime'], $dn, $pconfig['caref'], $pconfig['digest_alg'])) {
- $input_errors = array();
- while ($ssl_err = openssl_error_string()) {
- $input_errors[] = gettext("openssl library returns:") . " " . $ssl_err;
+
+ if (isset($pconfig['descr'])) {
+ $ca['descr'] = $pconfig['descr'];
+ } else {
+ $ca['descr'] = null;
+ }
+
+ if (!empty($pconfig['serial'])) {
+ $ca['serial'] = $pconfig['serial'];
+ }
+
+ if (isset($id)) {
+ // edit existing
+ $ca['crt'] = base64_encode($pconfig['cert']);
+ if (!empty($pconfig['key'])) {
+ $ca['prv'] = base64_encode($pconfig['key']);
+ }
+ } else {
+ $old_err_level = error_reporting(0); /* otherwise openssl_ functions throw warnings directly to a page screwing menu tab */
+ if ($pconfig['camethod'] == "existing") {
+ ca_import($ca, $pconfig['cert'], $pconfig['key'], $pconfig['serial']);
+ } elseif ($pconfig['camethod'] == "internal") {
+ $dn = array(
+ 'countryName' => $pconfig['dn_country'],
+ 'stateOrProvinceName' => $pconfig['dn_state'],
+ 'localityName' => $pconfig['dn_city'],
+ 'organizationName' => $pconfig['dn_organization'],
+ 'emailAddress' => $pconfig['dn_email'],
+ 'commonName' => $pconfig['dn_commonname']);
+ if (!ca_create($ca, $pconfig['keylen'], $pconfig['lifetime'], $dn, $pconfig['digest_alg'])) {
+ $input_errors = array();
+ while ($ssl_err = openssl_error_string()) {
+ $input_errors[] = gettext("openssl library returns:") . " " . $ssl_err;
+ }
+ }
+ } elseif ($pconfig['camethod'] == "intermediate") {
+ $dn = array(
+ 'countryName' => $pconfig['dn_country'],
+ 'stateOrProvinceName' => $pconfig['dn_state'],
+ 'localityName' => $pconfig['dn_city'],
+ 'organizationName' => $pconfig['dn_organization'],
+ 'emailAddress' => $pconfig['dn_email'],
+ 'commonName' => $pconfig['dn_commonname']);
+ if (!ca_inter_create($ca, $pconfig['keylen'], $pconfig['lifetime'], $dn, $pconfig['caref'], $pconfig['digest_alg'])) {
+ $input_errors = array();
+ while ($ssl_err = openssl_error_string()) {
+ $input_errors[] = gettext("openssl library returns:") . " " . $ssl_err;
+ }
}
}
+ error_reporting($old_err_level);
+ }
+
+ if (isset($id) && $a_ca[$id]) {
+ $a_ca[$id] = $ca;
+ } else {
+ $a_ca[] = $ca;
+ }
+
+ if (count($input_errors) == 0) {
+ write_config();
+ header("Location: system_camanager.php");
}
- error_reporting($old_err_level);
}
- if (isset($id) && $a_ca[$id]) {
- $a_ca[$id] = $ca;
- } else {
- $a_ca[] = $ca;
- }
-
- if (!$input_errors) {
- write_config();
- unset($input_errors);
- }
-
-// header("Location: system_camanager.php");
}
}
+
+legacy_html_escape_form_data($pconfig);
include("head.inc");
$main_buttons = array(
@@ -415,438 +419,372 @@ $main_buttons = array(
?>
+
-
-
-
-
-
+
+
+ 0) {
+ print_input_errors($input_errors);
+ }
+ if (isset($savemsg)) {
+ print_info_box($savemsg);
+ }
+?>
+
+
-
-
- 0) {
- print_input_errors($input_errors);
- }
- if (isset($savemsg)) {
- print_info_box($savemsg);
- }
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
- =gettext("Name");?>
- =gettext("Internal");?>
- =gettext("Issuer");?>
- =gettext("Certificates");?>
- =gettext("Distinguished Name");?>
-
-
-
-
-
-
+ "/>
+
+
+
+
+
+
+ =gettext("Existing Certificate Authority");?>
+
+
+
+
+ =gettext("Certificate data");?>
+
+ =isset($pconfig['cert']) ? $pconfig['cert'] : "";?>
+
+ =gettext("Paste a certificate in X.509 PEM format here.");?>
+
+
+
+
+
+ =gettext("Certificate Private Key");?>
+ =gettext("(optional)");?>
+
+
+ = isset($pconfig['key']) ? $pconfig['key'] : "";?>
+
+ =gettext("Paste the private key for the above certificate here. This is optional in most cases, but required if you need to generate a Certificate Revocation List (CRL).");?>
+
+
+
+
+ =gettext("Serial for next certificate");?>
+
+
+
+ =gettext("Enter a decimal number to be used as the serial number for the next certificate to be created using this CA.");?>
+
+
+
+
+
+
+
- if (isset($ca['caref'])) {
- $issuer_ca = lookup_ca($ca['caref']);
- if ($issuer_ca) {
- $issuer_name = $issuer_ca['descr'];
- }
- foreach ($a_cert as $cert) {
- if ($cert['caref'] == $ca['refid']) {
- $certcount++;
- }
- }
- foreach ($a_ca as $cert) {
- if ($cert['caref'] == $ca['refid']) {
- $certcount++;
- }
- }
- }
+
+
- // TODO : Need gray certificate icon
+
+
+ "/>
+
+
+
-
-
-
-
-
-
-
+
+ =htmlspecialchars($ca['descr']);?>
+ =!empty($ca['prv']) ? gettext("YES") : gettext("NO");?>
+ =$issuer_name;?>
+ =$certcount;?>
+ =$subj;?>
+
+
+
+ =gettext("Valid From")?>:
+ = $startdate ?>
+
+
+
+ =gettext("Valid Until")?>:
+ = $enddate ?>
+
+
+
+
+ " alt="=gettext("edit CA");?>" class="btn btn-default btn-xs">
+
+
+ " alt="=gettext("export CA cert");?>" class="btn btn-default btn-xs">
+
+
+
+ " class="btn btn-default btn-xs">
+
+
+
+ " data-toggle="tooltip" class="act_delete btn btn-default btn-xs">
+
+
+
+
+
+
+
+
-
+
+
+
-
-
-