<?php
require_once("certs.php");
require_role(ROLE_SYSTEMUSER);
$section = 'vhosts_certs';
if ($_GET['action'] == 'new')
{
check_form_token('vhosts_certs_new');
$cert = $_POST['cert'];
$key = $_POST['key'];
if (! isset($_POST['key']) && isset($_REQUEST['csr']))
{
$csr = csr_details($_REQUEST['csr']);
$key = $csr['key'];
}
$oldcert = NULL;
if ($_REQUEST['replace'])
{
$oldcert = cert_details($_REQUEST['replace']);
}
if (! $cert or ! $key)
system_failure('Es muss ein Zertifikat und der dazu passende private Schlüssel eingetragen werden');
$result = validate_certificate($cert, $key);
switch ($result)
{
case CERT_OK:
$certinfo = parse_cert_details($cert);
if ($oldcert)
refresh_cert($oldcert['id'], $certinfo, $cert, $key);
else
save_cert($certinfo, $cert, $key);
if (isset($_REQUEST['csr']))
delete_csr($_REQUEST['csr']);
header('Location: certs');
die();
break;
case CERT_INVALID:
system_failure("Das Zertifikat konnte nicht gelesen werden. Eventuell ist der private Schlüssel mit einem Paswort versehen?");
break;
case CERT_NOCHAIN:
warning('Ihr Zertifikat konnte nicht mit einer Zertifikats-Kette validiert werden. Dies wird zu Problemen beim Betrachten der damit betriebenen Websites führen. Dies kann daran liegen dass es abgelaufen ist oder wenn kein passendes CA-Bundle hinterlegt wurde. Die Admins können Ihr Zertifikats-Bundle auf dem System eintragen. Das Zertifikat wurde dennoch gespeichert.');
$certinfo = parse_cert_details($cert);
if ($oldcert)
refresh_cert($oldcert['id'], $certinfo, $cert, $key);
else
save_cert($certinfo, $cert, $key);
output('<p>'.internal_link('certs', 'Zurück zur Übersicht').'</p>');