diff --git a/src/www/system_certmanager.php b/src/www/system_certmanager.php
index 0eeb94bc7..94e46ba2f 100644
--- a/src/www/system_certmanager.php
+++ b/src/www/system_certmanager.php
@@ -32,237 +32,262 @@ require_once("system.inc");
function csr_generate(&$cert, $keylen, $dn, $digest_alg = 'sha256')
{
- $args = array(
- 'config' => '/usr/local/etc/ssl/opnsense.cnf',
- 'private_key_type' => OPENSSL_KEYTYPE_RSA,
- 'private_key_bits' => (int)$keylen,
- 'x509_extensions' => 'v3_req',
- '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_req',
+ '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;
+ }
- // export our request data
- if (!openssl_pkey_export($res_key, $str_key) ||
- !openssl_csr_export($res_csr, $str_csr)) {
- return false;
- }
+ // export our request data
+ if (!openssl_pkey_export($res_key, $str_key) ||
+ !openssl_csr_export($res_csr, $str_csr)) {
+ return false;
+ }
- // return our request information
- $cert['csr'] = base64_encode($str_csr);
- $cert['prv'] = base64_encode($str_key);
+ // return our request information
+ $cert['csr'] = base64_encode($str_csr);
+ $cert['prv'] = base64_encode($str_key);
- return true;
+ return true;
}
function csr_complete(& $cert, $str_crt)
{
- // return our request information
- $cert['crt'] = base64_encode($str_crt);
- unset($cert['csr']);
+ // return our request information
+ $cert['crt'] = base64_encode($str_crt);
+ unset($cert['csr']);
- return true;
+ return true;
}
function csr_get_modulus($str_crt, $decode = true)
{
- return cert_get_modulus($str_crt, $decode, 'csr');
+ return cert_get_modulus($str_crt, $decode, 'csr');
}
+// types
$cert_methods = array(
"import" => gettext("Import an existing Certificate"),
"internal" => gettext("Create an internal Certificate"),
"external" => gettext("Create a Certificate Signing Request"),
);
-
$cert_keylens = array( "512", "1024", "2048", "4096");
-
-$altname_types = array("DNS", "IP", "email", "URI");
$openssl_digest_algs = array("sha1", "sha224", "sha256", "sha384", "sha512");
-if (isset($_GET['userid']) && is_numericint($_GET['userid'])) {
- $userid = $_GET['userid'];
-}
-if (isset($_POST['userid']) && is_numericint($_POST['userid'])) {
- $userid = $_POST['userid'];
-}
-if (isset($userid)) {
- $cert_methods["existing"] = gettext("Choose an existing certificate");
- if (!is_array($config['system']['user'])) {
- $config['system']['user'] = array();
- }
- $a_user =& $config['system']['user'];
+// config reference pointers
+if (!isset($config['system']['user']) || !is_array($config['system']['user'])) {
+ $config['system']['user'] = array();
}
-
-if (isset($_GET['id']) && is_numericint($_GET['id'])) {
- $id = $_GET['id'];
-}
-if (isset($_POST['id']) && is_numericint($_POST['id'])) {
- $id = $_POST['id'];
-}
-
+$a_user =& $config['system']['user'];
if (!isset($config['ca']) || !is_array($config['ca'])) {
$config['ca'] = array();
}
-
$a_ca =& $config['ca'];
-
if (!is_array($config['cert'])) {
$config['cert'] = array();
}
-
$a_cert =& $config['cert'];
-$internal_ca_count = 0;
-foreach ($a_ca as $ca) {
- if ($ca['prv']) {
- $internal_ca_count++;
+
+// handle user GET/POST data
+if ($_SERVER['REQUEST_METHOD'] === 'GET') {
+ if (isset($a_user[$_GET['userid']])) {
+ $userid = $_GET['userid'];
+ $cert_methods["existing"] = gettext("Choose an existing certificate");
}
-}
-
-$act = null;
-if (isset($_GET['act'])) {
- $act = $_GET['act'];
-} elseif (isset($_POST['act'])) {
- $act = $_POST['act'];
-}
-
-if ($act == "del") {
- if (!isset($a_cert[$id])) {
- header("Location: system_certmanager.php");
- exit;
+ if (isset($a_cert[$_GET['id']])) {
+ $id = $_GET['id'];
}
- $name = $a_cert[$id]['descr'];
- unset($a_cert[$id]);
- write_config();
- $savemsg = sprintf(gettext("Certificate %s successfully deleted"), $name) . " ";
- header("Location: system_certmanager.php");
- exit;
-}
-
-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['csr_keylen'] = "2048";
- $pconfig['csr_digest_alg'] = "sha256";
- $pconfig['lifetime'] = "365";
-}
-if ($act == "exp") {
- if (!$a_cert[$id]) {
+ $pconfig = array();
+ if ($act == "new") {
+ if (isset($_GET['method'])) {
+ $pconfig['certmethod'] = $_GET['method'];
+ } else {
+ $pconfig['certmethod'] = null;
+ }
+ $pconfig['keylen'] = "2048";
+ $pconfig['digest_alg'] = "sha256";
+ $pconfig['csr_keylen'] = "2048";
+ $pconfig['csr_digest_alg'] = "sha256";
+ $pconfig['lifetime'] = "365";
+ $pconfig['cert'] = null;
+ $pconfig['key'] = null;
+ $pconfig['dn_country'] = null;
+ $pconfig['dn_state'] = null;
+ $pconfig['dn_city'] = null;
+ $pconfig['dn_organization'] = null;
+ $pconfig['dn_email'] = null;
+
+ if (isset($userid)) {
+ $pconfig['descr'] = $a_user[$userid]['name'];
+ $pconfig['dn_commonname'] = $a_user[$userid]['name'];
+ } else {
+ $pconfig['descr'] = null;
+ $pconfig['dn_commonname'] = null;
+ }
+
+ } elseif ($act == "exp") {
+ if (!isset($id)) {
+ header("Location: system_certmanager.php");
+ exit;
+ }
+
+ $exp_name = urlencode("{$a_cert[$id]['descr']}.crt");
+ $exp_data = base64_decode($a_cert[$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 == "key") {
+ if (!isset($id)) {
+ header("Location: system_certmanager.php");
+ exit;
+ }
+
+ $exp_name = urlencode("{$a_cert[$id]['descr']}.key");
+ $exp_data = base64_decode($a_cert[$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 ($act == "p12") {
+ if (!isset($id)) {
+ header("Location: system_certmanager.php");
+ exit;
+ }
+
+ $exp_name = urlencode("{$a_cert[$id]['descr']}.p12");
+ $args = array();
+ $args['friendly_name'] = $a_cert[$id]['descr'];
+
+ $ca = lookup_ca($a_cert[$id]['caref']);
+ if ($ca) {
+ $args['extracerts'] = openssl_x509_read(base64_decode($ca['crt']));
+ }
+
+ $res_crt = openssl_x509_read(base64_decode($a_cert[$id]['crt']));
+ $res_key = openssl_pkey_get_private(array(0 => base64_decode($a_cert[$id]['prv']) , 1 => ""));
+
+ $exp_data = "";
+ openssl_pkcs12_export($res_crt, $exp_data, $res_key, null, $args);
+ $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 == "csr") {
+ if (!isset($id)) {
+ header("Location: system_certmanager.php");
+ exit;
+ }
+ $pconfig['descr'] = $a_cert[$id]['descr'];
+ $pconfig['csr'] = base64_decode($a_cert[$id]['csr']);
+ $pconfig['cert'] = null;
+ }
+
+} elseif ($_SERVER['REQUEST_METHOD'] === 'POST') {
+ if (isset($a_cert[$_POST['id']])) {
+ $id = $_POST['id'];
+ }
+ if (isset($a_user[$_POST['userid']])) {
+ $userid = $_POST['userid'];
+ }
+ if (isset($_POST['act'])) {
+ $act = $_POST['act'];
+ } else {
+ $act = null;
+ }
+
+ if ($act == "del") {
+ if (isset($id)) {
+ unset($a_cert[$id]);
+ write_config();
+ }
header("Location: system_certmanager.php");
exit;
- }
+ } elseif ($act == "csr") {
+ $input_errors = array();
+ $pconfig = $_POST;
+ if (!isset($id)) {
+ header("Location: system_certmanager.php");
+ exit;
+ }
- $exp_name = urlencode("{$a_cert[$id]['descr']}.crt");
- $exp_data = base64_decode($a_cert[$id]['crt']);
- $exp_size = strlen($exp_data);
+ /* input validation */
+ $reqdfields = explode(" ", "descr cert");
+ $reqdfieldsn = array(
+ gettext("Descriptive name"),
+ gettext("Final Certificate data"));
- header("Content-Type: application/octet-stream");
- header("Content-Disposition: attachment; filename={$exp_name}");
- header("Content-Length: $exp_size");
- echo $exp_data;
- exit;
-}
+ do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
+ $mod_csr = csr_get_modulus($pconfig['csr'], false);
+ $mod_cert = cert_get_modulus($pconfig['cert'], false);
-if ($act == "key") {
- if (!$a_cert[$id]) {
- header("Location: system_certmanager.php");
- exit;
- }
+ if (strcmp($mod_csr, $mod_cert)) {
+ // simply: if the moduli don't match, then the private key and public key won't match
+ $input_errors[] = gettext("The certificate modulus does not match the signing request modulus.");
+ $subject_mismatch = true;
+ }
- $exp_name = urlencode("{$a_cert[$id]['descr']}.key");
- $exp_data = base64_decode($a_cert[$id]['prv']);
- $exp_size = strlen($exp_data);
+ /* save modifications */
+ if (count($input_errors) == 0) {
+ $cert = $a_cert[$id];
+ csr_complete($cert, $pconfig['cert']);
- header("Content-Type: application/octet-stream");
- header("Content-Disposition: attachment; filename={$exp_name}");
- header("Content-Length: $exp_size");
- echo $exp_data;
- exit;
-}
+ $a_cert[$id] = $cert;
-if ($act == "p12") {
- if (!$a_cert[$id]) {
- header("Location: system_certmanager.php");
- exit;
- }
+ write_config();
- $exp_name = urlencode("{$a_cert[$id]['descr']}.p12");
- $args = array();
- $args['friendly_name'] = $a_cert[$id]['descr'];
-
- $ca = lookup_ca($a_cert[$id]['caref']);
- if ($ca) {
- $args['extracerts'] = openssl_x509_read(base64_decode($ca['crt']));
- }
-
- $res_crt = openssl_x509_read(base64_decode($a_cert[$id]['crt']));
- $res_key = openssl_pkey_get_private(array(0 => base64_decode($a_cert[$id]['prv']) , 1 => ""));
-
- $exp_data = "";
- openssl_pkcs12_export($res_crt, $exp_data, $res_key, null, $args);
- $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 ($act == "csr") {
- if (!$a_cert[$id]) {
- header("Location: system_certmanager.php");
- exit;
- }
-
- $pconfig['descr'] = $a_cert[$id]['descr'];
- $pconfig['csr'] = base64_decode($a_cert[$id]['csr']);
-}
-
-if ($_POST) {
- if ($_POST['save'] == gettext("Save")) {
+ header("Location: system_certmanager.php");
+ exit;
+ }
+ } elseif (!empty($_POST['save'])) {
$input_errors = array();
$pconfig = $_POST;
/* input validation */
- if ($pconfig['method'] == "import") {
- $reqdfields = explode(
- " ",
- "descr cert key"
- );
+ if ($pconfig['certmethod'] == "import") {
+ $reqdfields = explode(" ", "descr cert key");
$reqdfieldsn = array(
gettext("Descriptive name"),
gettext("Certificate data"),
gettext("Key data"));
- if ($_POST['cert'] && (!strstr($_POST['cert'], "BEGIN CERTIFICATE") || !strstr($_POST['cert'], "END CERTIFICATE"))) {
+ 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 ($pconfig['method'] == "internal") {
- $reqdfields = explode(
- " ",
- "descr caref keylen lifetime dn_country dn_state dn_city ".
+ } elseif ($pconfig['certmethod'] == "internal") {
+ $reqdfields = explode(" ", "descr caref keylen lifetime dn_country dn_state dn_city ".
"dn_organization dn_email dn_commonname"
);
$reqdfieldsn = array(
@@ -276,12 +301,8 @@ if ($_POST) {
gettext("Distinguished name Organization"),
gettext("Distinguished name Email Address"),
gettext("Distinguished name Common Name"));
- }
-
- if ($pconfig['method'] == "external") {
- $reqdfields = explode(
- " ",
- "descr csr_keylen csr_dn_country csr_dn_state csr_dn_city ".
+ } elseif ($pconfig['certmethod'] == "external") {
+ $reqdfields = explode(" ", "descr csr_keylen csr_dn_country csr_dn_state csr_dn_city ".
"csr_dn_organization csr_dn_email csr_dn_commonname"
);
$reqdfieldsn = array(
@@ -293,34 +314,23 @@ if ($_POST) {
gettext("Distinguished name Organization"),
gettext("Distinguished name Email Address"),
gettext("Distinguished name Common Name"));
- }
-
- if ($pconfig['method'] == "existing") {
+ } elseif ($pconfig['certmethod'] == "existing") {
$reqdfields = array("certref");
$reqdfieldsn = array(gettext("Existing Certificate Choice"));
}
$altnames = array();
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
- if ($pconfig['method'] != "import" && $pconfig['method'] != "existing") {
+ do_input_validation($pconfig, $reqdfields, $reqdfieldsn, $input_errors);
+ if (isset($pconfig['altname_value']) && $pconfig['certmethod'] != "import" && $pconfig['certmethod'] != "existing") {
/* subjectAltNames */
- foreach ($_POST as $key => $value) {
- $entry = '';
- if (!substr_compare('altname_type', $key, 0, 12)) {
- $entry = substr($key, 12);
- $field = 'type';
- } elseif (!substr_compare('altname_value', $key, 0, 13)) {
- $entry = substr($key, 13);
- $field = 'value';
- }
- if (ctype_digit($entry)) {
- $altnames[$entry][$field] = $value;
+ foreach ($pconfig['altname_type'] as $altname_seq => $altname_type) {
+ if (!empty($pconfig['altname_value'][$altname_seq])) {
+ $altnames[] = array("type" => $altname_type, "value" => $pconfig['altname_value'][$altname_seq]);
}
}
- $pconfig['altnames']['item'] = $altnames;
/* Input validation for subjectAltNames */
- foreach ($altnames as $idx => $altname) {
+ foreach ($altnames as $altname) {
switch ($altname['type']) {
case "DNS":
if (!is_hostname($altname['value'])) {
@@ -341,7 +351,6 @@ if ($_POST) {
}
break;
case "URI":
- /* Close enough? */
if (!is_URL($altname['value'])) {
$input_errors[] = gettext("URI subjectAltName types must be a valid URI");
}
@@ -354,40 +363,40 @@ if ($_POST) {
/* Make sure we do not have invalid characters in the fields for the certificate */
for ($i = 0; $i < count($reqdfields); $i++) {
if (preg_match('/email/', $reqdfields[$i])) {
-/* dn_email or csr_dn_name */
- if (preg_match("/[\!\#\$\%\^\(\)\~\?\>\<\&\/\\\,\"\']/", $_POST[$reqdfields[$i]])) {
+ /* dn_email or csr_dn_name */
+ if (preg_match("/[\!\#\$\%\^\(\)\~\?\>\<\&\/\\\,\"\']/", $pconfig[$reqdfields[$i]])) {
$input_errors[] = gettext("The field 'Distinguished name Email Address' contains invalid characters.");
}
} elseif (preg_match('/commonname/', $reqdfields[$i])) {
-/* dn_commonname or csr_dn_commonname */
- if (preg_match("/[\!\@\#\$\%\^\(\)\~\?\>\<\&\/\\\,\"\']/", $_POST[$reqdfields[$i]])) {
+ /* dn_commonname or csr_dn_commonname */
+ if (preg_match("/[\!\@\#\$\%\^\(\)\~\?\>\<\&\/\\\,\"\']/", $pconfig[$reqdfields[$i]])) {
$input_errors[] = gettext("The field 'Distinguished name Common Name' contains invalid characters.");
}
- } elseif (($reqdfields[$i] != "descr") && preg_match("/[\!\@\#\$\%\^\(\)\~\?\>\<\&\/\\\,\.\"\']/", $_POST[$reqdfields[$i]])) {
+ } elseif (($reqdfields[$i] != "descr") && preg_match("/[\!\@\#\$\%\^\(\)\~\?\>\<\&\/\\\,\.\"\']/", $pconfig[$reqdfields[$i]])) {
$input_errors[] = sprintf(gettext("The field '%s' contains invalid characters."), $reqdfieldsn[$i]);
}
}
- if (($pconfig['method'] != "external") && isset($_POST["keylen"]) && !in_array($_POST["keylen"], $cert_keylens)) {
+ if ($pconfig['certmethod'] != "external" && isset($pconfig["keylen"]) && !in_array($pconfig["keylen"], $cert_keylens)) {
$input_errors[] = gettext("Please select a valid Key Length.");
}
- if (($pconfig['method'] != "external") && !in_array($_POST["digest_alg"], $openssl_digest_algs)) {
+ if ($pconfig['certmethod'] != "external" && !in_array($pconfig["digest_alg"], $openssl_digest_algs)) {
$input_errors[] = gettext("Please select a valid Digest Algorithm.");
}
- if (($pconfig['method'] == "external") && isset($_POST["csr_keylen"]) && !in_array($_POST["csr_keylen"], $cert_keylens)) {
+ if ($pconfig['certmethod'] == "external" && isset($pconfig["csr_keylen"]) && !in_array($pconfig["csr_keylen"], $cert_keylens)) {
$input_errors[] = gettext("Please select a valid Key Length.");
}
- if (($pconfig['method'] == "external") && !in_array($_POST["csr_digest_alg"], $openssl_digest_algs)) {
+ if ($pconfig['certmethod'] == "external" && !in_array($pconfig["csr_digest_alg"], $openssl_digest_algs)) {
$input_errors[] = gettext("Please select a valid Digest Algorithm.");
}
}
/* save modifications */
- if (!$input_errors) {
- if ($pconfig['method'] == "existing") {
+ if (count($input_errors) == 0) {
+ if ($pconfig['certmethod'] == "existing") {
$cert = lookup_cert($pconfig['certref']);
- if ($cert && $a_user) {
+ if ($cert && !empty($userid)) {
$a_user[$userid]['cert'][] = $cert['refid'];
}
} else {
@@ -401,11 +410,11 @@ if ($_POST) {
$old_err_level = error_reporting(0); /* otherwise openssl_ functions throw warings directly to a page screwing menu tab */
- if ($pconfig['method'] == "import") {
+ if ($pconfig['certmethod'] == "import") {
cert_import($cert, $pconfig['cert'], $pconfig['key']);
}
- if ($pconfig['method'] == "internal") {
+ if ($pconfig['certmethod'] == "internal") {
$dn = array(
'countryName' => $pconfig['dn_country'],
'stateOrProvinceName' => $pconfig['dn_state'],
@@ -420,6 +429,7 @@ if ($_POST) {
}
$dn['subjectAltName'] = implode(",", $altnames_tmp);
}
+
if (!cert_create(
$cert,
$pconfig['caref'],
@@ -435,7 +445,7 @@ if ($_POST) {
}
}
- if ($pconfig['method'] == "external") {
+ if ($pconfig['certmethod'] == "external") {
$dn = array(
'countryName' => $pconfig['csr_dn_country'],
'stateOrProvinceName' => $pconfig['csr_dn_state'],
@@ -459,7 +469,7 @@ if ($_POST) {
}
error_reporting($old_err_level);
- if (isset($id) && $a_cert[$id]) {
+ if (isset($id)) {
$a_cert[$id] = $cert;
} else {
$a_cert[] = $cert;
@@ -468,896 +478,787 @@ if ($_POST) {
$a_user[$userid]['cert'][] = $cert['refid'];
}
}
-
- if (!$input_errors) {
+ if (count($input_errors) == 0) {
write_config();
- }
-
- if (isset($userid)) {
- header("Location: system_usermanager.php?act=edit&userid=".$userid);
+ if (isset($userid)) {
+ header("Location: system_usermanager.php?act=edit&userid=".$userid);
+ } else {
+ header("Location: system_certmanager.php");
+ }
exit;
}
- }
- }
- if ($_POST['save'] == gettext("Update")) {
- unset($input_errors);
- $pconfig = $_POST;
-
- /* input validation */
- $reqdfields = explode(" ", "descr cert");
- $reqdfieldsn = array(
- gettext("Descriptive name"),
- gettext("Final Certificate data"));
-
- do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
-
-// old way
- /* make sure this csr and certificate subjects match */
-// $subj_csr = csr_get_subject($pconfig['csr'], false);
-// $subj_cert = cert_get_subject($pconfig['cert'], false);
-//
-// if ( !isset($_POST['ignoresubjectmismatch']) && !($_POST['ignoresubjectmismatch'] == "yes") ) {
-// if (strcmp($subj_csr,$subj_cert)) {
-// $input_errors[] = sprintf(gettext("The certificate subject '%s' does not match the signing request subject."),$subj_cert);
-// $subject_mismatch = true;
-// }
-// }
- $mod_csr = csr_get_modulus($pconfig['csr'], false);
- $mod_cert = cert_get_modulus($pconfig['cert'], false);
-
- if (strcmp($mod_csr, $mod_cert)) {
- // simply: if the moduli don't match, then the private key and public key won't match
- $input_errors[] = gettext("The certificate modulus does not match the signing request modulus.");
- $subject_mismatch = true;
- }
-
- /* save modifications */
- if (!$input_errors) {
- $cert = $a_cert[$id];
-
- $cert['descr'] = $pconfig['descr'];
-
- csr_complete($cert, $pconfig['cert']);
-
- $a_cert[$id] = $cert;
-
- write_config();
-
- header("Location: system_certmanager.php");
}
}
}
include("head.inc");
-$main_buttons = array(
- array('label'=>gettext("add or import certificate"), 'href'=>'system_certmanager.php?act=new'),
-);
-
-
+if (empty($act)) {
+ $main_buttons = array(
+ array('label'=>gettext("add or import certificate"), 'href'=>'system_certmanager.php?act=new'),
+ );
+}
?>
+
+
-
-
-
-
-
+
+
+ 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("Issuer");?>
+ =gettext("Distinguished Name");?>
+ =gettext("In Use");?>
+
+
+
+
-
-
- =gettext("Import Certificate");?>
-
-
-
-
-
- =gettext("Certificate data");?>
-
-
-
- =gettext("Paste a certificate in X.509 PEM format here.");?>
-
-
-
- =gettext("Private key data");?>
-
-
-
- =gettext("Paste a private key in X.509 PEM format here.");?>
-
-
-
-
-
-
-
-
-
-
- =gettext("External Signing Request");?>
-
-
-
-
- =gettext("Key length");?>
-
-
-
- >=$len;?>
-
-
- bits
-
-
-
- =gettext("Digest Algorithm");?>
-
-
-
- >=strtoupper($csr_digest_alg);?>
-
-
- = gettext("NOTE: It is recommended to use an algorithm stronger than SHA1 when possible.") ?>
-
-
-
- =gettext("Distinguished name");?>
-
-
-
-
-
-
-
-
-
-
- =gettext("Choose an Existing Certificate");?>
-
-
-
-
- =gettext("Existing Certificates");?>
-
-
-
-
-
-
- >=$cert['descr'] . $caname . $inuse . $revoked;?>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- =gettext("Name");?>
- =gettext("Issuer");?>
- =gettext("Distinguished Name");?>
- =gettext("In Use");?>
-
-
-
- " . gettext("self-signed") . "";
- } else {
- $caname = "" . gettext("external"). " ";
- }
- $subj = htmlspecialchars($subj);
- }
-
- if (isset($cert['csr'])) {
- $subj = htmlspecialchars(csr_get_subject($cert['csr']));
- $caname = "" . gettext("external - signature pending") . " ";
- }
- if (isset($cert['caref'])) {
- $ca = lookup_ca($cert['caref']);
- if ($ca) {
- $caname = $ca['descr'];
- }
- }
-
- $certimg = ' ';
- ?>
-
-
-
-
-
- =$certimg;?>
-
-
- =$name;?>
-
-
-
-
-
- =gettext('CA:') ?> ,
- =gettext('Server:') ?>
-
-
-
-
- =$caname;?>
- =$subj;?>
-
-
-
- =gettext("Valid From")?>:
- = $startdate ?>
-
-
-
- =gettext("Valid Until")?>:
- = $enddate ?>
-
-
-
-
-
- =gettext('Revoked') ?>
-
-
- =gettext('webConfigurator') ?>
-
-
- =gettext('User Cert') ?>
-
-
- =gettext('OpenVPN Server') ?>
-
-
- =gettext('OpenVPN Client') ?>
-
-
- =gettext('IPsec Tunnel') ?>
-
+ if (!empty($cert['crt'])) {
+ $subj = cert_get_subject($cert['crt']);
+ $issuer = cert_get_issuer($cert['crt']);
+ $purpose = cert_get_purpose($cert['crt']);
+ list($startdate, $enddate) = cert_get_dates($cert['crt']);
+ if ($subj==$issuer) {
+ $caname = "" . gettext("self-signed") . " ";
+ } else {
+ $caname = "" . gettext("external"). " ";
+ }
+ $subj = htmlspecialchars($subj);
+ }
+ if (isset($cert['csr'])) {
+ $subj = htmlspecialchars(csr_get_subject($cert['csr']));
+ $caname = "" . gettext("external - signature pending") . " ";
+ }
+ if (isset($cert['caref'])) {
+ $ca = lookup_ca($cert['caref']);
+ if ($ca) {
+ $caname = $ca['descr'];
+ }
+ }?>
+
+
+
+ =$name;?>
+
+
+ =gettext('CA:') ?> =$purpose['ca']; ?>,
+ =gettext('Server:') ?> =$purpose['server']; ?>
+
+
+ =$caname;?>
+ =$subj;?>
+
+
+
+ =gettext("Valid From")?>:
+ = $startdate ?>
+
+
+
+ =gettext("Valid Until")?>:
+ = $enddate ?>
+
+
+
+
+
+ =gettext('Revoked') ?>
+
+ =gettext('webConfigurator') ?>
+
+ =gettext('User Cert') ?>
+
+ =gettext('OpenVPN Server') ?>
+
+ =gettext('OpenVPN Client') ?>
+
+ =gettext('IPsec Tunnel') ?>
+
- ">
-
-
+ ">
+
+
- ">
-
-
+ ">
+
+
- ">
-
-
-
+ ">
+
+
+
- ')" data-toggle="tooltip" data-placement="left" title="=gettext("delete cert");?>">
-
-
+ " data-toggle="tooltip" class="act_delete btn btn-default btn-xs">
+
+
+
+ ">
+
+
+
+
+
+
-
-
-
- ">
-
-
-
-
-
-
-
-
-
- =gettext("Note: You can only delete a certificate if it is not currently in use.");?>
-
-
-
-
-
-
-
-
+
+
+ =gettext("Note: You can only delete a certificate if it is not currently in use.");?>
+
+
+
+
+
+
+
+
-
-
-